比赛 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;
}