6118 : 숨바꼭질

풀이

최단경로 가즈아~~~

코드

#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;

const int n_ = 20000 + 2;

int n, m, a, b, c, dst[n_];
vector<int> gph[n_];

int main() {
    scanf("%d %d", &n, &m);
    for (int i = 0, u, v; i < m; i++) {
        scanf("%d %d", &u, &v);
        gph[u].push_back(v);
        gph[v].push_back(u);
    }

    queue<int> que;
    que.push(1);
    while (!que.empty()) {
        int now = que.front();
        que.pop();
        for (int nxt : gph[now]) if (!dst[nxt]) {
            que.push(nxt);
            dst[nxt] = dst[now] + 1;
            b = max(b, dst[nxt]);
        }
    }

    for (int i = 2; i <= n; i++) if (dst[i] == b) {
        if (!a) a = i; c++;
    }

    printf("%d %d %d\n", a, b, c);

    return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2018-04-01 16:24

Read more posts by this author