orz dfs能过的柏神。
(我的代码并不能通过,但是是对的)
考场上还是老老实实bfs吧
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define md
#define ll long long
#define inf (int) 1e9
#define eps 1e-8
#define N 1000010
using namespace std;
struct yts { int x,t,ne; ll l; } e[2*N];
int sz[N];
int v[N],fa[N];
ll ans=0;
int num=0,n;
void put(int x,int y,ll l)
{
num++; e[num].x=x; e[num].t=y; e[num].l=l;
e[num].ne=v[x]; v[x]=num;
}
void dfs(int x)
{
sz[x]=1;
for (int i=v[x];i;i=e[i].ne)
{
if (e[i].t!=fa[x])
{
fa[e[i].t]=x;
dfs(e[i].t);
ans+=e[i].l*(ll)abs(sz[e[i].t]-(n-sz[e[i].t]));
sz[x]+=sz[e[i].t];
}
}
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n-1;i++)
{
int x,y; ll l;
scanf("%d%d%lld",&x,&y,&l);
put(x,y,l); put(y,x,l);
}
ans=0;
dfs(1);
printf("%lld\n",ans);
return 0;
}