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