10分求调
查看原帖
10分求调
528802
AC_notonlyAC楼主2023/4/12 23:10
#include<bits/stdc++.h>
using namespace std;
#define long long int
const int N=10000010;
int head[N],tail[N],nxt[N],val[N],tot,size[N];
void add_edge(int u,int v,int w)
{
	tail[++tot]=v;
	val[tot]=w;
	nxt[tot]=head[u];
	head[u]=tot;
}
int n,sum;
void dfs(int x,int fth)
{
	size[x]=1;
	for(int i=head[x];i;i=nxt[i])
	{
		int ed=tail[i];
		int vl=val[i];
		if(fth==ed) continue;
	    dfs(ed,x);
		size[x]+=size[ed];
		sum+=vl*abs(size[ed]-(n-size[ed]));	
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		add_edge(a,b,c);
		add_edge(b,a,c);
	}
	dfs(1,0);
	cout<<sum<<endl;
}
2023/4/12 23:10
加载中...