比赛 20120418s 评测结果 AAAAAAAWWW
题目名称 捉迷藏 最终得分 70
用户昵称 TBK 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-18 08:46:06
显示代码纯文本
#include <iostream> 
#include <cstdio> 
#include <cstdlib> 
#include <cmath> 
#include <cstring> 
#include <string> 
#include <iomanip> 
#include <vector> 
#include <set> 
#include <algorithm> 
#define MAXN 0x7fffffff 
using namespace std; 
int a,b,c,d,l,m,n,r[20001],h=1,t,x[10000],k[20001];
bool bo[20001];
struct fun
{
	int x;
	int y;
}f[100001];
int Compare(const void*elem1,const void*elem2)
{
	struct fun*elem3=(struct fun*)elem1;
	struct fun*elem4=(struct fun*)elem2;
	if (elem3->x != elem4->x) return elem3->x - elem4->x;
		else return elem3->y - elem4->y;
}
void BFS(void)
{
	bo[1]=true;
	while (h>t)
	{
		for (l=k[x[t]-1];l<k[x[t]];l++)
			if (bo[f[l].y]==false)
			{
				bo[f[l].y]=true;
				r[f[l].y]=r[x[t]]+1;
				x[h]=f[l].y;
				h++;
			}
		t++;
	}
}
int main(void) 
{ 
    freopen("hideseek.in","r",stdin); 
    freopen("hideseek.out","w",stdout); 
    scanf("%d%d",&b,&c);
	for (d=0;d<c;d++)
	{
		scanf("%d%d",&f[d].x,&f[d].y);
		f[d+c].x=f[d].y;
		f[d+c].y=f[d].x;
	}
	c*=2;
	qsort(f,c,sizeof(fun),Compare);
	k[0]=0;
	k[b]=c;
	for (d=0;d<c-1;d++)
		if (f[d].x!=f[d+1].x) k[f[d].x]=d+1;
	for (d=1;d<b-1;d++)
		if (k[d]==0) k[d]=k[d-1];
	x[0]=1;
	BFS();
	for (d=1;d<=b;d++)
		if (r[d]>n) 
		{
			n=r[d];
			m=1;
			l=d;
		}
			else if (r[d]==n) m++;
	printf("%d %d %d",l,r[l],m);
    fclose(stdin); 
    fclose(stdout); 
    return 0; 
}