比赛 |
20120418s |
评测结果 |
WWWWWWWWWW |
题目名称 |
捉迷藏 |
最终得分 |
0 |
用户昵称 |
日光。 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-04-18 11:16:44 |
显示代码纯文本
#include<fstream>
using namespace std;
int d[1001];
int stack[1001];
int in[1001];
int i,N,j,ll;
int t=0,temp=0;
ifstream fin("hideseek.in");
ofstream fout("hideseek.out");
struct node
{
int Point;
int Path;
node*next;
};
node*Head[20001];
int Count=0;
node Node[100001];
int add(int start,int next)
{
Node[Count].Point=next;
Node[Count].next=Head[start];
Head[start]=&Node[Count];
Count++;
}
int spfa(int s)
{
int top;
top=1;
stack[top++]=s;
in[s]=1;
d[s]=0;
while(top>1)
{
int now=stack[top---1];
node*know=Head[now];
while(know!=0)
{
if(d[know->Point]>d[now]+know->Path)
{
d[know->Point]=d[now]+know->Path;
if(in[know->Point]==0)
{
stack[top++]=know->Point;
in[know->Point]++;
}
}
know=know->next;
}
in[now]=0;
}
for(i=1;i<=N;i++)
{
if(t<d[i])
{
t=d[i];
ll=i;
}
for(j=i+1;j<=N;j++)
{
if(d[j]==d[i]) temp++;
}
}
fout<<t<<" "<<ll<<" "<<temp<<endl;
}
int main()
{
int M,N,a,b;
fin>>N>>M;
for(i=1;i<=M;i++)
{
Node[i].Path=1;
}
for(i=1;i<=M;i++)
{
fin>>a>>b;
add(a,b);
add(b,a);
}
spfa(1);
return 0;
}