#include<iostream>
#include<cstdio>
using namespace std;
struct edge{
int to,next,v;
}e[2100001];
long long ans;
int n,cnt,size[1100001],head[1100001],fa[1100001];
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
inline int iabs(int x){return x<0?-x:x;}
void ins(int u,int v,int w){
e[++cnt].to=v;e[cnt].next=head[u];e[cnt].v=w;head[u]=cnt;
}
void dfs(int x)
{
size[x]++;
for(int i=head[x];i;i=e[i].next)
if(e[i].to!=fa[x])
{
fa[e[i].to]=x;
dfs(e[i].to);
size[x]+=size[e[i].to];
ans+=(long long)e[i].v*iabs(n-2*size[e[i].to]);
}
}
int main(){
n=read();
for(int i=1;i<=n-1;i++){
int u=read(),v=read(),w=read();
ins(u,v,w);ins(v,u,w);
}
dfs(1);
printf("%lld",ans);
return 0;
}
2435: [Noi2011]道路修建
最新推荐文章于 2023-01-06 21:05:57 发布