解题思路
看了题面觉得极水,本来想顺手水一下,结果一直RE。。。
后来发下此题卡系统栈。。。mdzz。。
所以dfs要少传几个参要不就会RE。
代码:
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdio>
#include<cstdlib>
using namespace std;
int hed[1000005],nex[2000005],lb[2000005],val[2000005];
int siz[1000005],pa[1000005];
int n,lo;
long long ans=0;
void add(int x,int y,int num){
lo++;
nex[lo]=hed[x];
hed[x]=lo;
lb[lo]=y;
val[lo]=num;
}
void dfs(int x){
siz[x]=1;pa[x]=1;
for(int i=hed[x];i!=0;i=nex[i])
if(!pa[lb[i]]){
dfs(lb[i]);
siz[x]+=siz[lb[i]];
ans+=1ll*abs(n-siz[lb[i]]-siz[lb[i]])*val[i];
}
}
main(){
int ai,bi,ci;
scanf("%d",&n);
for(int i=1;i<n;i++){
scanf("%d%d%d",&ai,&bi,&ci);
add(ai,bi,ci);add(bi,ai,ci);
}
pa[1]=1;dfs(1);
printf("%lld",ans);
}