답안 #697591

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
697591 2023-02-10T13:25:44 Z piOOE Newspapers (CEOI21_newspapers) C++17
0 / 100
1000 ms 212 KB
#include <bits/stdc++.h>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m;
    cin >> n >> m;

    vector<vector<int>> adj(n);

    vector<int> fa(n);
    iota(fa.begin(), fa.end(), 0);

    auto leader = [&](int x) {
        while (x != fa[x]) x = fa[x] = fa[fa[x]];
        return x;
    };

    auto unite = [&](int x, int y) -> bool {
        x = leader(x), y = leader(y);
        return (x != y) && (fa[y] = x, true);
    };

    bool yay = true;

    for (int i = 0; i < m; ++i) {
        int x, y;
        cin >> x >> y;
        x -= 1, y -= 1;

        adj[x].push_back(y);
        adj[y].push_back(x);

        yay &= unite(x, y);
    }

    if (!yay) {
        cout << "NO\n";
        return 0;
    }

    auto bfs = [&](int source) {
        vector<int> dist(n, -1);
        dist[source] = 0;

        queue<int> q;
        q.push(source);

        while (!q.empty()) {
            int v = q.front();
            q.pop();

            for (int to : adj[v]) {
                if (dist[to] < dist[v] + 1) {
                    dist[to] = dist[v] + 1;
                    q.push(to);
                }
            }
        }

        return dist;
    };

    auto tmp = bfs(0);

    int d1 = max_element(tmp.begin(), tmp.end()) - tmp.begin();

    auto dist1 = bfs(d1);

    int d2 = max_element(dist1.begin(), dist1.end()) - dist1.begin();

    auto dist2 = bfs(d2);

    int diam = dist1[d2];

    for (int i = 0; i < n && yay; ++i) {
        int len = (dist1[i] + dist2[i] - diam) / 2;

        if (len >= 2) {
            yay = false;
        }
    }

    if (yay) {
        cout << "YES\n";

        cout << "1\n1\n";
    } else {
        cout << "NO\n";
    }

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1088 ms 212 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1086 ms 212 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1088 ms 212 KB Time limit exceeded
3 Halted 0 ms 0 KB -