记录编号 38376 评测结果 AAAAAAAAAA
题目名称 [USACO Open09] 捉迷藏 最终得分 100
用户昵称 Gravatar王者自由 是否通过 通过
代码语言 C++ 运行时间 0.143 s
提交时间 2012-04-18 11:42:16 内存使用 0.57 MiB
显示代码纯文本
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int N = 20000 + 10, INF = ~0u>>2;
int n, m, a, b, s, t, k, d[N];
vector<int> G[N];
void Dijkstra() {
    priority_queue<pair<int, int> > q;
    bool l[N] = {0}; int u, v;
    for(int i=1; i<=n; i++) d[i] = INF;
    d[1] = 0; q.push(make_pair(0, 1));
    while(!q.empty()) {
        u = q.top().second; q.pop();
        if(!l[u]) {
            l[u] = 1;
            for(int i=0; i<G[u].size(); i++) {
                v = G[u][i];
                if(!l[v] && d[v] > d[u] + 1) {
                    d[v] = d[u] + 1;
                    q.push(make_pair(-d[v], v));
                }
            }
        }
    }
}
int main() {
    freopen("hideseek.in", "r", stdin);
    freopen("hideseek.out", "w", stdout);
    scanf("%d %d", &n, &m);
    for(int i=1; i<=m; i++) {
        scanf("%d %d", &a, &b);
        G[a].push_back(b);
        G[b].push_back(a);
    }
    Dijkstra();
    s = *max_element(d+1, d+n+1);
    for(int i=1; i<=n; i++) if(d[i] == s) {
        k++;
        if(t == 0) t = i;
    }
    printf("%d %d %d\n", t, s, k);
    return 0;
}