听灌多
  • 板块灌水区
  • 楼主tsh_qwq
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/9 19:05
  • 上次更新2024/12/9 22:00:17
查看原帖
听灌多
1485346
tsh_qwq楼主2024/12/9 19:05

题目
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;
}

2024/12/9 19:05
加载中...