Submission #697565

# Submission time Handle Problem Language Result Execution time Memory
697565 2023-02-10T11:35:22 Z piOOE Newspapers (CEOI21_newspapers) C++17
4 / 100
1 ms 596 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) {
        vector<int> down(n), up(n), parent(n, -1);

        auto dfs = [&](auto self, int v) -> void {
            for (int to: adj[v]) {
                if (to != parent[v]) {
                    parent[to] = v;
                    self(self, to);
                    down[v] = max(down[v], down[to] + 1);
                }
            }
        };

        dfs(dfs, 0);

        auto gfs = [&](auto self, int v) -> void {
            vector<int> nxt(adj[v]);
            auto it = find(nxt.begin(), nxt.end(), parent[v]);

            if (it != nxt.end()) {
                nxt.erase(it);
            }

            int s = size(nxt);

            vector<int> pref(s + 1), suf(s + 1);

            for (int i = 0; i < s; ++i) {
                int to = nxt[i];
                pref[i + 1] = max(pref[i], down[to]);
            }

            for (int i = s - 1; i >= 0; --i) {
                int to = nxt[i];
                suf[i] = max(suf[i + 1], down[to]);

                up[to] = max(pref[i], suf[i + 1]);

                self(self, to);
            }
        };

        gfs(gfs, 0);

        for (int i = 0; i < n && yay; ++i) {
            int cnt = up[i] > 1;

            for (int to: adj[i]) {
                if (to != parent[i]) {
                    cnt += down[to] + 1 > 1;
                }
            }

            yay &= cnt <= 2;
        }
    }

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

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

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
3 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
4 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
5 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
6 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
7 Correct 1 ms 212 KB Output is correct
8 Incorrect 0 ms 212 KB Output isn't correct
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
3 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
4 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
5 Partially correct 1 ms 212 KB Failed to provide a successful strategy.
6 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
7 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
8 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
9 Partially correct 1 ms 212 KB Failed to provide a successful strategy.
10 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
11 Partially correct 1 ms 596 KB Failed to provide a successful strategy.
12 Partially correct 1 ms 468 KB Failed to provide a successful strategy.
13 Partially correct 1 ms 468 KB Failed to provide a successful strategy.
14 Partially correct 1 ms 468 KB Failed to provide a successful strategy.
15 Partially correct 1 ms 468 KB Failed to provide a successful strategy.
16 Partially correct 1 ms 596 KB Failed to provide a successful strategy.
17 Partially correct 1 ms 596 KB Failed to provide a successful strategy.
18 Partially correct 1 ms 596 KB Failed to provide a successful strategy.
19 Partially correct 1 ms 596 KB Failed to provide a successful strategy.
20 Partially correct 1 ms 596 KB Failed to provide a successful strategy.
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
3 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
4 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
5 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
6 Partially correct 0 ms 212 KB Failed to provide a successful strategy.
7 Correct 1 ms 212 KB Output is correct
8 Incorrect 0 ms 212 KB Output isn't correct
9 Halted 0 ms 0 KB -