#GOC33129. 树

树

题目描述

一棵树有n个节点,n-1条边。第i条边连接的两个结点是u[i]和v[i]。第i个结点有一个权值a[i]。对于任意的1<=i<j<=n,给出一些定义:

1、定义Path[i][j]表示结点i到结点j的简单路径上的所有结点的集合。

2、定义gcd[i][j]表示Path[i][j]集合内所有结点的权值的最大公约数。

3、定义size[i][j]表示结点i到结点j的简单路径所包含的结点数量(包含结点i和j)。

4、定义cost[i][j] = size[i][j] × gcd[i][j]。

你的任务是:对于任意的1<=i<j<=n,求cost[i][j]的总和,则求:

![](./1414/file/img01.png)


输入格式

第一行,一个整数n。

第二行,n个整数,第i个整数是a[i]。

接下有n-1行,第i行是两个整数u[i]和v[i],1<= u[i]<v[i]<=n, 表示树的第i条边。

【数据范围】

对于50%的数据, 1<=n<=1000,    1<=a[i]<=100000。

对于100%的数据,1<=n<=100000,  1<=a[i]<=100000。


输出格式

一个整数。


输入/输出例子1

4
24 30 28 7
1 2
1 3
3 4
47


输入/输出例子2

10
180 168 120 144 192 200 198 160 156 150
1 2
2 3
2 4
2 5
5 6
4 7
7 8
7 9
9 10
1184