NOI水题,如今不用写人工栈更加水了…
AC code:
#include <cstdio>
#include <vector>
using namespace std;
const int N=1000010;
typedef long long ll;
int n;
int siz[N];
ll ans;
struct Data{
int v,w;
Data() {}
Data(int v,int w):v(v),w(w) {}
};
vector<Data> G[N];
ll Abs(int x){
return x>0?x:-x;
}
void DFS(int x,int pre,int w){
siz[x]=1;
for(int i=0;i<(int)G[x].size();i++){
int y=G[x][i].v;
if(y==pre) continue;
DFS(y,x,G[x][i].w);
siz[x]+=siz[y];
}
ans+=w*Abs(n-(siz[x]<<1));
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
G[a].push_back(Data(b,c));
G[b].push_back(Data(a,c));
}
DFS(1,0,0);
printf("%lld\n",ans);
return 0;
}