比赛 |
20161115 |
评测结果 |
AWWWAAWWWWWWWWWWWWWW |
题目名称 |
树和机器人 |
最终得分 |
15 |
用户昵称 |
srO cwm Orz |
运行时间 |
0.181 s |
代码语言 |
C++ |
内存使用 |
0.94 MiB |
提交时间 |
2016-11-15 11:40:34 |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 50010;
const int oo = 1<<30;
struct Edge{
int from,to,dist;
};
vector<int> G[maxn];
vector<Edge> edges;
bool vis[maxn];
int ans=oo;
int n,k,r;
void addEdge(int u,int v,int w){
edges.push_back((Edge){u,v,w});
edges.push_back((Edge){u,v,w});
int m = edges.size();
G[u].push_back(m-2);
G[v].push_back(m-1);
}
bool check(){
for(int i = 1; i < n; i++)if(!vis[i])return 0;
return 1;
}
void dfs1(int o,int v,int d){
if(v > ans)return;
if(check()){
ans = min(v,ans);
return;
}
for(int i = 0; i < G[o].size(); i++){
Edge& e = edges[G[o][i]];
if(!vis[e.to]){
vis[e.to]=1;
dfs1(i,v+e.dist,d+1);
vis[e.to]=0;
}
}
}
int main(){
#ifndef DEBUG
string FileName="trobot";
freopen((FileName+".in").c_str(),"r",stdin);
freopen((FileName+".out").c_str(),"w",stdout);
#endif
scanf("%d%d%d",&n,&r,&k);
int flag1(1);
int sum=0;
for(int i = 0; i < n-1; i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
if(v!=1)flag1=0;
sum += w;
addEdge(u,v,w);
}
if(k == 1){
dfs1(r,0,0);
printf("%d\n",ans);
}
else{
printf("%d",sum);
}
}