题目
code:
#include <bits/stdc++.h>
#pragma GCC optimize("3","Ofast","inline")
#define gcd __gcd
using namespace std;
vector<int>e[100005];
int n,v[100005],p[100005],d[100005],f[100005],un[100005];
void dfs(int u,int fa)
{
p[u]=fa;
un[u]=1;
f[u]=v[u];
for(auto x:e[u])
{
if(x==fa)continue;
d[x]=d[u]+1;
dfs(x,u);
un[u]+=un[x];
f[u]=gcd(f[u],f[x]);
}
}
long long ans()
{
long long res=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
int s=un[i]+un[j],e=gcd(f[i],f[j]);
res+=s*e;
}
}
return res;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>v[i];
for(int i=0;i<n-1;i++)
{
int u,v;
cin>>u>>v;
e[u].push_back(v);
e[v].push_back(u);
}
d[1]=0;
dfs(1,-1);
cout<<ans();
return 0;
}