记录编号 |
48874 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2010冲刺十三]逃离遗迹 |
最终得分 |
100 |
用户昵称 |
怡红公子 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.060 s |
提交时间 |
2012-11-06 20:16:48 |
内存使用 |
4.21 MiB |
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<fstream>
using namespace std;
ifstream fin("escapeb.in");
ofstream fout("escapeb.out");
int n,A,B,C;int a[20005]={0},b[20005]={0},c[20005]={0};
struct E{int u,v,w,next;}edg[40010];int edgs=0,head[20005];
void Addedg(int u,int v,int w){
edgs++;
edg[edgs].u=u;edg[edgs].v=v;edg[edgs].w=w;
edg[edgs].next=head[u];
head[u]=edgs;
}
bool vis[20005]={0};
void Dfs(int last,int d[]){
for(int i=head[last];i!=-1;i=edg[i].next)
{
int v=edg[i].v,w=edg[i].w;
if(!vis[v])
{
vis[v]=1;
d[v]=d[last]+w;
Dfs(v,d);
}
}
}
int main()
{
fin>>n>>A>>B>>C;
memset(head,-1,sizeof(head));
for(int i=1;i<n;++i)
{
int u,v,w;
fin>>u>>v>>w;
Addedg(u,v,w);
Addedg(v,u,w);
}
// for(int i=1;i<=edgs;++i)
//cout<<edg[i].u<<" "<<edg[i].v<<" "<<edg[i].w<<" "<<edg[i].next<<endl;cout<<endl;
// for(int i=1;i<=n;++i) cout<<head[i]<<endl;
memset(vis,0,sizeof(vis));vis[A]=1;
Dfs(A,a);
memset(vis,0,sizeof(vis));vis[B]=1;
Dfs(B,b);
memset(vis,0,sizeof(vis));vis[C]=1;
Dfs(C,c);
// for(int i=1;i<=n;++i)
// cout<<a[i]<<" "<<b[i]<<" "<<c[i]<<endl;
int k,ans=1000000000;
for(int i=1;i<=n;++i)
if(a[i]+b[i]+c[i]<ans)
ans=a[i]+b[i]+c[i],k=i;
fout<<k<<endl<<ans<<endl;
// system("pause");
return 0;
}