比赛 20120418s 评测结果 AAAAAAAAAA
题目名称 捉迷藏 最终得分 100
用户昵称 Makazeu 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-18 08:41:58
显示代码纯文本
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <queue>
  4. #include <algorithm>
  5. #include <vector>
  6. #define MAXN 20001
  7. using namespace std;
  8. int N,M;
  9. vector<int> Map[MAXN];
  10. int dist[MAXN],flag[MAXN];
  11. const int INF=~0u>>3;
  12. priority_queue<pair<int,int> > heap;
  13. void Dijkstra()
  14. {
  15. int u,v,nxt;
  16. for(int i=1;i<=N;i++) flag[i]=0,dist[i]=INF;
  17. dist[1]=0; heap.push(make_pair(0,1));
  18. while(!heap.empty())
  19. {
  20. u=heap.top().second; heap.pop();
  21. if(flag[u]) continue; flag[u]=1;
  22. for(unsigned int i=0;i<Map[u].size();i++)
  23. {
  24. v=Map[u][i]; nxt=dist[u]+1;
  25. if(!flag[v] && dist[v]>nxt)
  26. {
  27. dist[v]=nxt;
  28. heap.push(make_pair(-dist[v],v));
  29. }
  30. }
  31. }
  32. int id,ans=0,time;
  33. for(int i=1;i<=N;i++)
  34. {
  35. if(dist[i]<ans) continue;
  36. if(dist[i]>ans)
  37. {
  38. id=i;
  39. time=1;
  40. ans=dist[i];
  41. continue;
  42. }
  43. time++;
  44. }
  45. printf("%d %d %d\n",id,ans,time);
  46. }
  47.  
  48. void init()
  49. {
  50. scanf("%d %d\n",&N,&M); int x,y;
  51. for(int i=1;i<=M;i++)
  52. {
  53. scanf("%d %d\n",&x,&y);
  54. Map[x].push_back(y);
  55. Map[y].push_back(x);
  56. }
  57. }
  58.  
  59. int main()
  60. {
  61. freopen("hideseek.in","r",stdin);
  62. freopen("hideseek.out","w",stdout);
  63. init();
  64. Dijkstra();
  65. return 0;
  66. }