记录编号 |
347720 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[ZJOI 2007]时态同步 |
最终得分 |
100 |
用户昵称 |
哒哒哒哒哒! |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
4.125 s |
提交时间 |
2016-11-13 15:43:53 |
内存使用 |
17.51 MiB |
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
using namespace std;
#define ll long long
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;
}
const int maxn=501000;
struct edge{int to,next,dis;}e[maxn*2];
int tot,head[maxn];
void add(int u,int v,int w){
e[++tot].to=v;
e[tot].dis=w;
e[tot].next=head[u];
head[u]=tot;
}
int n,rt;
int f[maxn],g[maxn];
ll ans;
void dfs(int u,int fa){
for(int i=head[u];i;i=e[i].next){
int to=e[i].to;
if(to==fa) continue;
dfs(to,u);
f[u]=max(f[u],f[to]+e[i].dis);
}
for(int i=head[u];i;i=e[i].next){
int to=e[i].to;
if(to==fa) continue;
ans+=f[u]-f[to]-e[i].dis;
}
}
int main(){
freopen("synch.in","r",stdin);freopen("synch.out","w",stdout);
int __size__=50<<20;
char *__p__=(char*)malloc(__size__)+__size__;
__asm__("movl %0, %%esp\n"::"r"(__p__));
n=read(),rt=read();
for(int i=1;i<n;i++){
int a=read(),b=read(),c=read();
add(a,b,c);add(b,a,c);
}
dfs(rt,0);
printf("%lld\n",ans);
fclose(stdin);fclose(stdout);
return 0;
}