比赛 20120418s 评测结果 AAAAAAAAAA
题目名称 捉迷藏 最终得分 100
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-18 09:03:57
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<vector>
using namespace std;
typedef vector<int>vec;
vec a[20010];
void spfa();
int n,m,ans1,ans2=0,ans3=0;
int main()
{
	freopen ("hideseek.in","r",stdin);
	freopen ("hideseek.out","w",stdout);
	cin>>n>>m;
	for (int i=0;i<m;i++)
	{
		int b,c;
		scanf("%d%d",&b,&c);
		a[c].push_back(b);		
		a[b].push_back(c);
	}
	spfa();
	cout<<ans1<<' '<<ans2<<' '<<ans3;
	return 0;
}

void spfa()
{
	int q[100001]={0};
	int w[20001]={0};
	int tou,wei;
	tou=wei=1;
	q[1]=1;
	for (int i=1;i<=n;i++)
		w[i]=10000000;
	w[1]=0;
	bool used[20001]={0};
	used[1]=1;
	while (tou<=wei)
	{
		for (int i=0;i<a[q[tou]].size();i++)
		{
			int j;
			j=a[q[tou]][i];
			if (!used[j]&&w[q[tou]]+1<w[j])
			{
				used[j]=1;
				w[j]=w[q[tou]]+1;
				wei++;
				q[wei]=j;
			}
		}
		if (w[q[tou]]>ans2||(w[q[tou]]==ans2&&q[tou]<ans1))
		{
			ans1=q[tou];
			ans2=w[q[tou]];
		}
		tou++;
	}
	for (int i=1;i<=n;i++)
	{
		if (w[i]==ans2)
			ans3++;
	}
}