CF1210C.Kamil and Making a Stream

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Kamil 喜欢观看竞技编程的视频。他的 MeTube 频道最近达到了 100100 万订阅者。为了庆祝这一时刻,他发布了一个有趣但自己还未能解决的问题。你能帮助他吗?

给定一棵树——一个包含 nn 个顶点、由 n−1n-1 条边连接而成的连通无向图。树的根为顶点 11。如果顶点 uu 位于从根到顶点 vv 的最短路径上,则称 uu 是 vv 的祖先。特别地,一个顶点也是它自身的祖先。

每个顶点 vv 被赋予一个美丽值 xvx_v,它是一个不超过 101210^{12} 的非负整数。基于此,我们可以定义一条路径的美丽值。设 uu 是 vv 的祖先,则路径的美丽值 f(u,v)f(u, v) 定义为从 uu 到 vv 的最短路径上所有顶点美丽值的最大公约数。形式化地,若 u=t1,t2,t3,…,tk=vu = t_1, t_2, t_3, \dots, t_k = v 是从 uu 到 vv 的最短路径上的顶点,则 f(u,v)=gcd⁡(xt1,xt2,…,xtk)f(u, v) = \gcd(x_{t_1}, x_{t_2}, \dots, x_{t_k})。这里 gcd⁡\gcd 表示一组数的最大公约数。特别地,f(u,u)=gcd⁡(xu)=xuf(u, u) = \gcd(x_u) = x_u。

你的任务是计算如下和:

∑u 是 v 的祖先f(u,v)\sum_{u\text{ 是 }v\text{ 的祖先}} f(u, v)

由于结果可能过大,请输出对 109+710^9 + 7 取模后的答案。

注意,对于任意 yy,有 gcd⁡(0,y)=gcd⁡(y,0)=y\gcd(0, y) = \gcd(y, 0) = y。特别地,gcd⁡(0,0)=0\gcd(0, 0) = 0。

输入格式

第一行包含一个整数 nn(2≤n≤100 0002 \le n \le 100\,000),表示树的顶点数。

第二行包含 nn 个整数 x1,x2,…,xnx_1, x_2, \dots, x_n(0≤xi≤10120 \le x_i \le 10^{12}),其中 xvx_v 表示顶点 vv 的美丽值。

接下来的 n−1n-1 行描述树的边。每行包含两个整数 a,ba, b(1≤a,b≤n1 \le a, b \le n,a≠ba \neq b),表示顶点 aa 和顶点 bb 之间有一条边。

输出格式

输出所有满足 uu 是 vv 的祖先的路径 (u,v)(u, v) 的美丽值之和。答案对 109+710^9 + 7 取模。

输入输出样例

  • 输入#1

    5
    4 5 6 0 8
    1 2
    1 3
    1 4
    4 5

    输出#1

    42
  • 输入#2

    7
    0 2 3 0 0 0 0
    1 2
    1 3
    2 4
    2 5
    3 6
    3 7

    输出#2

    30

说明/提示

下图展示了所有 1010 条以一个端点为另一个端点祖先的路径。所有这些路径的美丽值之和为 4242:

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页