记录编号 |
38392 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO Open09] 捉迷藏 |
最终得分 |
100 |
用户昵称 |
TBK |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.203 s |
提交时间 |
2012-04-18 12:31:33 |
内存使用 |
5.02 MiB |
显示代码纯文本
- #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[1000000],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;
- }