比赛 |
20120418s |
评测结果 |
AAAAAAATTT |
题目名称 |
捉迷藏 |
最终得分 |
70 |
用户昵称 |
feng |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-04-18 10:45:43 |
显示代码纯文本
#include<fstream>
#include<memory.h>
using namespace std;
struct node{
int s;
int next;
};
struct edge{
int y;
int v;
int next;
};
node a[10001];
edge e[20010];
bool v[10001];
int q[50000];
int dis[10001];
int n,m,i,j,k,p,c,x,y;
void add(int x1,int y1)
{
m++;
a[x1].s++;
e[m].y=y1;
e[m].v=1;
e[m].next=a[x1].next;
a[x1].next=m;
}
void SPFA(int s)
{
int t,temp,i;
int head=0,tail=0;
memset(q,0,sizeof(q));
memset(v,false,sizeof(v));
for (i=1;i<=n;i++)
dis[i]=1000000000;
tail++;
q[tail]=s;
v[s]=true;
dis[s]=0;
while (head!=tail)
{
head++;
temp=q[head];
v[temp]=false;
t=a[temp].next;
for (i=1;i<=a[temp].s;i++)
{
if (e[t].v+dis[temp]<dis[e[t].y])
{
dis[e[t].y]=dis[temp]+e[t].v;
if (!v[e[t].y])
{
v[e[t].y]=true;
tail++;
q[tail]=e[t].y;
}
}
t=e[t].next;
}
}
}
int main()
{
int E;
ifstream fin("hideseek.in");
ofstream fout("hideseek.out");
fin>>n>>E;
for (i=1;i<=E;i++)
{
fin>>x>>y;
add(x,y);
add(y,x);
}
SPFA(1);
int maxa=0;
int p;
for (i=1;i<=n;i++)
if ((maxa<dis[i])and(dis[i]<=10000000))
{
maxa=dis[i];
p=i;
}
int s=0;
for (i=1;i<=n;i++)
if (dis[i]==maxa)
{
s++;
}
fout<<p<<' '<<maxa<<' '<<s;
fin.close();
fout.close();
return 0;
}