Submission #935735

# Submission time Handle Problem Language Result Execution time Memory
935735 2024-02-29T12:59:04 Z peterandvoi Game (IOI14_game) C++17
15 / 100
1000 ms 604 KB
#include <bits/stdc++.h>

using namespace std;

#ifdef ngu
#include "debug.h"
#else
#define debug(...) 42
#endif

struct my_dsu {
    int n, cc;
    vector<int> e, cant;
    vector<vector<int>> cnt;

    my_dsu() {};

    my_dsu(int n): n(n), cc(n) {
        e.resize(n);
        cant.resize(n, 0);
        cnt.resize(n, vector<int>(n, 0));
        for (int i = 0; i < n; ++i) {
            e[i] = -1;
            cant[i] = 1;
            for (int j = 0; j < n; ++j) {
                if (i != j) {
                    cnt[i][j]++;
                }
            }
        }
    }

    int get(int u) {
        return e[u] < 0 ? u : u = get(e[u]);
    }

    bool need_merge(int u) {
        return cant[u] == n - 1;
    }

    void del(int u, int v) {
        u = get(u);
        v = get(v);
        cnt[u][v]--;
        cnt[v][u]--;
        cant[u] += cnt[u][v] == 0;
        cant[v] += cnt[u][v] == 0;
    }

    void unite(int u, int v, bool big) {
        if (e[u] > e[v]) {
            swap(u, v);
        }
        cc--;
        e[u] += e[v];
        e[v] = u;
        cant[u] = 0;
        for (int j = 0; j < n; ++j) {
            if (get(j) != u && j == get(j)) {
                cnt[u][j] += cnt[v][j];
                cant[j] -= cnt[j][v] == 0;
                cant[j] -= cnt[j][u] == 0;
                cnt[j][u] += cnt[j][v];
                cnt[j][v] = 0;
                cant[j]++;
                cant[j] += cnt[j][u] == 0;
            } else {
                cnt[u][j] = 0;
            }
            cant[u] += cnt[u][j] == 0;
        }
        if (big && need_merge(u)) {
            for (int i = 0; i < n; ++i) {
                if (cnt[u][i]) {
                    unite(u, i, true);
                }
            }
        }
    }

    int check(int u, int v) {
        u = get(u);
        v = get(v);
        if (cnt[u][v] == 1) {
            unite(u, v, false);
            return 1;
        }
        del(u, v);
        return 0;
    }

    void upd(int u) {
        u = get(u);
        if (need_merge(u)) {
            int v = -1;
            for (int i = 0; i < n; ++i) {
                if (cnt[u][i]) {
                    v = i;
                    break;
                }
            }
            unite(u, v, true);
        }
    }

    bool same(int u, int v) {
        return get(u) == get(v);
    }
} G1, G2;


int hasEdge(int u, int v) {
    if (G1.same(u, v)) {
        return G2.check(u, v);
    }
    G1.del(u, v);
    G2.del(u, v);
    G1.upd(u);
    G1.upd(v);
    return 0;
}

void initialize(int n) {
    G1 = my_dsu(n);
    G2 = my_dsu(n);
}

#ifdef ngu
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    #ifdef ngu
    freopen("test.inp", "r", stdin);
    freopen("test.out", "w", stdout);
    #endif
    int n;
    cin >> n;
    initialize(n);
    for (int i = 0; i < n * (n - 1) / 2; ++i) {
        int u, v;
        cin >> u >> v;
        assert(G2.cc > 1);
        hasEdge(u, v);
//        debug(u, v, hasEdge(u, v));
    }
    debug(G1.cc);
    assert(G1.cc == 1);
}
#endif
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 344 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 ms 344 KB Output is correct
13 Correct 0 ms 448 KB Output is correct
14 Correct 0 ms 500 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 344 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 600 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 0 ms 348 KB Output is correct
24 Correct 0 ms 444 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 452 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Correct 1 ms 344 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 344 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 0 ms 348 KB Output is correct
24 Correct 0 ms 348 KB Output is correct
25 Execution timed out 1070 ms 348 KB Time limit exceeded
26 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 344 KB Output is correct
11 Correct 0 ms 604 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 600 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 1 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 344 KB Output is correct
21 Correct 1 ms 344 KB Output is correct
22 Correct 1 ms 348 KB Output is correct
23 Correct 0 ms 348 KB Output is correct
24 Correct 0 ms 348 KB Output is correct
25 Execution timed out 1063 ms 348 KB Time limit exceeded
26 Halted 0 ms 0 KB -