Submission #510543

# Submission time Handle Problem Language Result Execution time Memory
510543 2022-01-15T01:44:18 Z tabr Connecting Supertrees (IOI20_supertrees) C++17
30 / 100
319 ms 22100 KB
#include <bits/stdc++.h>
using namespace std;
#ifdef tabr
#include "library/debug.cpp"
#else
#define debug(...)
#endif

void build(vector<vector<int>>);

struct dsu {
    vector<int> p;
    vector<int> sz;
    int n;

    dsu(int _n) : n(_n) {
        p.resize(n);
        iota(p.begin(), p.end(), 0);
        sz.assign(n, 1);
    }

    inline int get(int x) {
        if (p[x] == x) {
            return x;
        } else {
            return p[x] = get(p[x]);
        }
    }

    inline bool unite(int x, int y) {
        x = get(x);
        y = get(y);
        if (x == y) {
            return false;
        }
        if (sz[x] > sz[y]) {
            swap(x, y);
        }
        p[x] = y;
        sz[y] += sz[x];
        return true;
    }

    inline bool same(int x, int y) {
        return (get(x) == get(y));
    }
};

int construct(vector<vector<int>> p) {
    int n = (int) p.size();
    dsu uf1(n);
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (p[i][j] == 1) {
                uf1.unite(i, j);
            }
        }
    }
    vector<vector<int>> res(n, vector<int>(n));
    vector<vector<int>> c(n);
    for (int i = 0; i < n; i++) {
        c[uf1.get(i)].emplace_back(i);
    }
    for (int i = 0; i < n; i++) {
        for (int x = 0; x < (int) c[i].size(); x++) {
            if (x > 0) {
                res[c[i][0]][c[i][x]] = res[c[i][x]][c[i][0]] = 1;
            }
            for (int y = x + 1; y < (int) c[i].size(); y++) {
                if (p[x][y] != 1) {
                    return 0;
                }
            }
        }
    }
    dsu uf2(n);
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (uf1.get(i) == i && uf1.get(j) == j && p[i][j] == 2) {
                uf2.unite(i, j);
            }
        }
    }
    c = vector<vector<int>>(n);
    for (int i = 0; i < n; i++) {
        if (uf1.get(i) == i) {
            c[uf2.get(i)].emplace_back(i);
        }
    }
    for (int i = 0; i < n; i++) {
        int sz = (int) c[i].size();
        if (sz == 0 || sz == 1) {
            continue;
        }
        if (sz == 2) {
            return 0;
        }
        for (int j = 0; j < sz; j++) {
            res[c[i][j]][c[i][(j + 1) % sz]] = res[c[i][(j + 1) % sz]][c[i][j]] = 1;
        }
        for (int x = 0; x < sz; x++) {
            for (int y = x + 1; y < sz; y++) {
                if (p[c[i][x]][c[i][y]] != 2) {
                    return 0;
                }
            }
        }
    }
    build(res);
    return 1;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 16 ms 1132 KB Output is correct
7 Correct 231 ms 21996 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 16 ms 1132 KB Output is correct
7 Correct 231 ms 21996 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 9 ms 1196 KB Output is correct
13 Correct 188 ms 22100 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 1 ms 256 KB Output is correct
16 Correct 7 ms 716 KB Output is correct
17 Correct 127 ms 12152 KB Output is correct
18 Correct 1 ms 204 KB Output is correct
19 Correct 1 ms 204 KB Output is correct
20 Incorrect 31 ms 3200 KB Answer gives possible 0 while actual possible 1
21 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 11 ms 1132 KB Output is correct
9 Correct 275 ms 22072 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 16 ms 1140 KB Output is correct
13 Correct 319 ms 22008 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 0 ms 204 KB Output is correct
16 Correct 6 ms 708 KB Output is correct
17 Correct 122 ms 12176 KB Output is correct
18 Correct 1 ms 204 KB Output is correct
19 Correct 1 ms 204 KB Output is correct
20 Correct 1 ms 204 KB Output is correct
21 Correct 55 ms 5740 KB Output is correct
22 Correct 252 ms 22056 KB Output is correct
23 Correct 259 ms 22012 KB Output is correct
24 Correct 294 ms 22052 KB Output is correct
25 Correct 106 ms 12152 KB Output is correct
26 Correct 114 ms 12160 KB Output is correct
27 Correct 223 ms 22048 KB Output is correct
28 Correct 241 ms 21988 KB Output is correct
29 Correct 126 ms 12152 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Incorrect 1 ms 204 KB Answer gives possible 0 while actual possible 1
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 16 ms 1132 KB Output is correct
7 Correct 231 ms 21996 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 9 ms 1196 KB Output is correct
13 Correct 188 ms 22100 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 1 ms 256 KB Output is correct
16 Correct 7 ms 716 KB Output is correct
17 Correct 127 ms 12152 KB Output is correct
18 Correct 1 ms 204 KB Output is correct
19 Correct 1 ms 204 KB Output is correct
20 Incorrect 31 ms 3200 KB Answer gives possible 0 while actual possible 1
21 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 16 ms 1132 KB Output is correct
7 Correct 231 ms 21996 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 9 ms 1196 KB Output is correct
13 Correct 188 ms 22100 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 1 ms 256 KB Output is correct
16 Correct 7 ms 716 KB Output is correct
17 Correct 127 ms 12152 KB Output is correct
18 Correct 1 ms 204 KB Output is correct
19 Correct 1 ms 204 KB Output is correct
20 Incorrect 31 ms 3200 KB Answer gives possible 0 while actual possible 1
21 Halted 0 ms 0 KB -