比赛 20161115 评测结果 AWWWAAWWWWWWWWWWWWWW
题目名称 树和机器人 最终得分 15
用户昵称 coolkid 运行时间 0.128 s
代码语言 C++ 内存使用 5.65 MiB
提交时间 2016-11-15 11:56:09
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int MAXN=1e5+10;
const int MAXM=MAXN<<1;

struct Edge{
	int from,to,dist,nxt;
}edges[MAXM];
int head[MAXN],cnt=0;

void addedge(int f,int t,int d){
	edges[cnt].from=f;edges[cnt].to=t;edges[cnt].dist=d;
	edges[cnt].nxt=head[f];
	head[f]=cnt++;
}

int n,r,k;
int dist[MAXM];
int son[MAXN];
long long ans=0;

void init(){
	memset(head,-1,sizeof(head));
	scanf("%d%d%d",&n,&r,&k);
	for(int i=1;i<n;i++){
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		addedge(x,y,z);
		addedge(y,x,z);
		ans+=z;
	}
	cout<<ans<<endl;
	exit(0);
	memset(son,0,sizeof(son));
}

int deep[MAXN];
int fa[MAXN];
int dp=0; 

void dfs(int u){
	for(int i=head[u];~i;i=edges[i].nxt){
		int v=edges[i].to;
		if(fa[u]==v) continue;
		fa[v]=u;
		deep[v]=deep[u]+1;
		dp=max(dp,deep[v]);
		dfs(v);
	}
}

int sz=0;

void work(){
	dfs(r);
	long long ans1=0;
	for(int i=1;i<=n;i++) if(deep[i]==dp){
		for(int j=head[i];~j;j=edges[j].nxt) dist[sz++]=edges[j].dist;
	}
	sort(dist,dist+sz);
	ans1=ans;
	if(k==1) ans1=ans*2-dist[sz-1];
	cout<<ans1<<endl;
}
		
int main(){
	freopen("trobot.in","r",stdin);
	freopen("trobot.out","w",stdout);
	init();
	work();
	return 0;
}