![BZOJ2435: [Noi2011]道路修建 BZOJ2435: [Noi2011]道路修建](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700)
这种水题真是……没一次AC都不好意思见人啊
P.S. LINUX无限栈真是爽炸了… 我爱递归
/**************************************************************
Problem: 2435
User: zhuohan123
Language: C++
Result: Accepted
Time:5320 ms
Memory:93192 kb
****************************************************************/ #include <iostream>
#include <cstdio>
using namespace std;
inline int iabs(int a){return a<?-a:a;}
inline int getnum()
{
int ans=;char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')ans=ans*+ch-'',ch=getchar();
return ans;
}
int n;
struct point{int head,f,size;}p[];
struct edge{int next,to,c;}g[];int gnum;
void addedge(int from,int to,int c)
{
g[++gnum].to=to;g[gnum].c=c;g[gnum].next=p[from].head;p[from].head=gnum;
}
long long ans=;
void dfs(int po)
{
p[po].size++;
for(int i=p[po].head;i;i=g[i].next)
if(g[i].to!=p[po].f)
{
p[g[i].to].f=po;
dfs(g[i].to);
p[po].size+=p[g[i].to].size;
ans+=(long long)g[i].c*iabs(n-*p[g[i].to].size);
}
}
int main(int argc, char *argv[])
{
n=getnum();
for(int i=;i<n;i++)
{
int u=getnum(),v=getnum(),c=getnum();
addedge(u,v,c);addedge(v,u,c);
}
dfs();
cout<<ans<<endl;
return ;
}