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