记录编号 338994 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOI 2011]道路修建 最终得分 100
用户昵称 Gravatar_Itachi 是否通过 通过
代码语言 C++ 运行时间 9.136 s
提交时间 2016-11-05 17:20:31 内存使用 30.75 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000005;
#define LL long long
int n,len=1,size[maxn],head[maxn],st[maxn],cnt=0,fa[maxn];
struct Rabit_tree{int to,next,dis;}e[maxn<<1];
void Rabit_set(int prt,int son,int dis){
	e[++len].to=son,e[len].next=head[prt],head[prt]=len,e[len].dis=dis;	
}
#define to e[i].to
int Rabit_abs(int x){return x<0?-x:x;}
LL Rabit_run(){
	int RT=n>>1|1,rt,i;LL ans=0;st[++cnt]=RT;
	while(cnt){
		rt=st[cnt];
		if(!size[rt]){
			size[rt]=1;
			for(i=head[rt];i;i=e[i].next)
				if(fa[rt]^to)fa[to]=rt,st[++cnt]=to;
		}
		else{
			for(i=head[rt];i;i=e[i].next)
				if(fa[to]==rt)
					ans+=Rabit_abs(n-size[to]-size[to])*1ll*e[i].dis;
			size[fa[rt]]+=size[rt];	
			cnt--;
		}
	}
	return ans;
}
void Rabit_main(){
	scanf("%d",&n);int i,x,y,z;
	for(i=1;i<n;i++)
		scanf("%d%d%d",&x,&y,&z),Rabit_set(x,y,z),Rabit_set(y,x,z);
	printf("%lld\n",Rabit_run());
}
int main(){
#define _Rabit _RABIT
#ifdef _Rabit
	freopen("noi2011_road.in","r",stdin);
	freopen("noi2011_road.out","w",stdout);
#endif
	Rabit_main();
#ifndef _Rabit
	getchar(),getchar();
#endif
	fclose(stdin);fclose(stdout);
	return 0;
}