传送门biu~
第一眼看:这不是sb题么?
实际上当树的深度特别大的时候,递归的层数过深,系统栈就特别容易崩溃。之前在dfs的时候传了两个参数,一直RE。还好有Duan2baka大佬指教,改成一个参数才可以Ac掉这道题。
#include<bits/stdc++.h>
using namespace std;
int n;
int head[1000005],siz[1000005],nex[2000005],to[2000005],val[2000005],tp=0;
long long ans=0;
inline void add(int x,int y,int z){
nex[++tp]=head[x];
head[x]=tp;
to[tp]=y;
val[tp]=z;
}
void dfs(int x){
siz[x]=1;
for(int i=head[x];i;i=nex[i]){
if(siz[to[i]]) continue;
dfs(to[i]);
ans+=1ll*val[i]*abs(n-siz[to[i]]-siz[to[i]]);
siz[x]+=siz[to[i]];
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;++i){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
}
dfs(1);
printf("%lld",ans);
return 0;
}