记录编号 | 66513 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [USACO Open09] 捉迷藏 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.059 s | ||
提交时间 | 2013-07-29 17:28:23 | 内存使用 | 0.69 MiB | ||
#include <fstream> #include <cstdlib> #include <queue> #include <algorithm> #include <vector> #define MAXN 20001 using namespace std; ifstream fin("hideseek.in"); ofstream fout("hideseek.out"); int N,M; vector<int> Map[MAXN]; int dist[MAXN],flag[MAXN]; const int INF=~0u>>3; priority_queue<pair<int,int> > heap; void Hander() { int u,v,nxt; for(int i=1;i<=N;i++) flag[i]=0,dist[i]=INF; dist[1]=0; heap.push(make_pair(0,1)); while(!heap.empty()) { u=heap.top().second; heap.pop(); if(flag[u]) continue; flag[u]=1; for(unsigned int i=0;i<Map[u].size();i++) { v=Map[u][i]; nxt=dist[u]+1; if(!flag[v] && dist[v]>nxt) { dist[v]=nxt; heap.push(make_pair(-dist[v],v)); } } } int id,ans=0,time; for(int i=1;i<=N;i++) { if(dist[i]<ans) continue; if(dist[i]>ans) { id=i; time=1; ans=dist[i]; continue; } time++; } fout<<id<<" "<<ans<<" "<<time; } void init() { fin>>N>>M; int x,y; for(int i=1;i<=M;i++) { fin>>x>>y; Map[x].push_back(y); Map[y].push_back(x); } } int main() { init(); Hander(); fin.close(); fout.close(); return 0; }