rt
只过了第一个和第二个测试点
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
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-48;
ch=getchar();
}
return x*f;
}
struct node{
int v,w;
};
vector<node> g[N];
int n,siz[N],ans;
void dfs(int rt,int fa)
{
siz[rt]=1;
for(int i=0;i<g[rt].size();i++)
{
int to=g[rt][i].v;
if(to==fa) continue;
dfs(to,rt);
siz[rt]+=siz[to];
}
}
void dfs2(int rt,int fa)
{
for(int i=0;i<g[rt].size();i++)
{
int to=g[rt][i].v;
if(to==fa) continue;
ans+=abs(n-2*siz[to])*g[rt][i].w;
dfs2(to,rt);
}
}
int main( )
{
n=read();
for(int i=1;i<n;i++)
{
int u,v,w;
u=read();
v=read();
w=read();
g[u].push_back({v,w});
g[v].push_back({u,w});
}
dfs(1,-1);
dfs2(1,-1);
cout<<ans;
return 0;
}