Submission #935740

# Submission time Handle Problem Language Result Execution time Memory
935740 2024-02-29T13:05:10 Z peterandvoi Game (IOI14_game) C++17
15 / 100
2 ms 600 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) {
            upd(u);
        }
    }

    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);
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 360 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 344 KB Output is correct
9 Correct 0 ms 344 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 1 ms 344 KB Output is correct
16 Correct 1 ms 348 KB Output is correct
17 Correct 0 ms 344 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 1 ms 348 KB Output is correct
21 Correct 0 ms 444 KB Output is correct
22 Correct 1 ms 344 KB Output is correct
23 Correct 1 ms 348 KB Output is correct
24 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 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 1 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 ms 512 KB Output is correct
13 Correct 0 ms 348 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 348 KB Output is correct
17 Correct 0 ms 344 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 1 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 Correct 1 ms 344 KB Output is correct
26 Correct 1 ms 348 KB Output is correct
27 Correct 0 ms 348 KB Output is correct
28 Correct 0 ms 348 KB Output is correct
29 Correct 0 ms 348 KB Output is correct
30 Correct 1 ms 348 KB Output is correct
31 Correct 1 ms 348 KB Output is correct
32 Correct 1 ms 348 KB Output is correct
33 Correct 0 ms 348 KB Output is correct
34 Correct 1 ms 348 KB Output is correct
35 Correct 1 ms 348 KB Output is correct
36 Correct 1 ms 344 KB Output is correct
37 Correct 1 ms 528 KB Output is correct
38 Correct 1 ms 348 KB Output is correct
39 Correct 1 ms 348 KB Output is correct
40 Correct 2 ms 348 KB Output is correct
41 Correct 1 ms 344 KB Output is correct
42 Incorrect 2 ms 348 KB Output isn't correct
43 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 600 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 0 ms 348 KB Output is correct
13 Correct 0 ms 448 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 348 KB Output is correct
17 Correct 1 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 1 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 344 KB Output is correct
24 Correct 0 ms 348 KB Output is correct
25 Correct 0 ms 348 KB Output is correct
26 Correct 1 ms 348 KB Output is correct
27 Correct 0 ms 348 KB Output is correct
28 Correct 1 ms 348 KB Output is correct
29 Correct 0 ms 348 KB Output is correct
30 Correct 0 ms 348 KB Output is correct
31 Correct 1 ms 348 KB Output is correct
32 Correct 1 ms 436 KB Output is correct
33 Correct 1 ms 348 KB Output is correct
34 Correct 1 ms 348 KB Output is correct
35 Correct 1 ms 348 KB Output is correct
36 Correct 1 ms 348 KB Output is correct
37 Correct 1 ms 348 KB Output is correct
38 Correct 1 ms 348 KB Output is correct
39 Correct 1 ms 356 KB Output is correct
40 Correct 1 ms 356 KB Output is correct
41 Correct 1 ms 532 KB Output is correct
42 Incorrect 1 ms 348 KB Output isn't correct
43 Halted 0 ms 0 KB -