记录编号 38392 评测结果 AAAAAAAAAA
题目名称 [USACO Open09] 捉迷藏 最终得分 100
用户昵称 GravatarTBK 是否通过 通过
代码语言 C++ 运行时间 0.203 s
提交时间 2012-04-18 12:31:33 内存使用 5.02 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <string>
  7. #include <iomanip>
  8. #include <vector>
  9. #include <set>
  10. #include <algorithm>
  11. #define MAXN 0x7fffffff
  12. using namespace std;
  13. int a,b,c,d,l,m,n,r[20001],h=1,t,x[1000000],k[20001];
  14. bool bo[20001];
  15. struct fun
  16. {
  17. int x;
  18. int y;
  19. }f[100001];
  20. int Compare(const void*elem1,const void*elem2)
  21. {
  22. struct fun*elem3=(struct fun*)elem1;
  23. struct fun*elem4=(struct fun*)elem2;
  24. if (elem3->x != elem4->x) return elem3->x - elem4->x;
  25. else return elem3->y - elem4->y;
  26. }
  27. void BFS(void)
  28. {
  29. bo[1]=true;
  30. while (h>t)
  31. {
  32. for (l=k[x[t]-1];l<k[x[t]];l++)
  33. if (bo[f[l].y]==false)
  34. {
  35. bo[f[l].y]=true;
  36. r[f[l].y]=r[x[t]]+1;
  37. x[h]=f[l].y;
  38. h++;
  39. }
  40. t++;
  41. }
  42. }
  43. int main(void)
  44. {
  45. freopen("hideseek.in","r",stdin);
  46. freopen("hideseek.out","w",stdout);
  47. scanf("%d%d",&b,&c);
  48. for (d=0;d<c;d++)
  49. {
  50. scanf("%d%d",&f[d].x,&f[d].y);
  51. f[d+c].x=f[d].y;
  52. f[d+c].y=f[d].x;
  53. }
  54. c*=2;
  55. qsort(f,c,sizeof(fun),Compare);
  56. k[0]=0;
  57. k[b]=c;
  58. for (d=0;d<c-1;d++)
  59. if (f[d].x!=f[d+1].x) k[f[d].x]=d+1;
  60. for (d=1;d<b-1;d++)
  61. if (k[d]==0) k[d]=k[d-1];
  62. x[0]=1;
  63. BFS();
  64. for (d=1;d<=b;d++)
  65. if (r[d]>n)
  66. {
  67. n=r[d];
  68. m=1;
  69. l=d;
  70. }
  71. else if (r[d]==n) m++;
  72. printf("%d %d %d",l,r[l],m);
  73. fclose(stdin);
  74. fclose(stdout);
  75. return 0;
  76. }