Submission #416049

#TimeUsernameProblemLanguageResultExecution timeMemory
416049dxz05Game (IOI14_game)C++14
0 / 100
2 ms280 KiB
#include "game.h"

const int MAXN = 111111;

int p[MAXN], sz[MAXN], deg[MAXN];
int find(int x){
    return (x == p[x] ? x : p[x] = find(p[x]));
}

void unite(int x, int y){
    x = find(x);
    y = find(y);
    if (x == y) return;
    p[x] = y;
    sz[y] += sz[x];
}

int n;
void initialize(int _n) {
    n = _n;
    for (int i = 0; i < n; i++) p[i] = i, sz[i] = 1;
}

int hasEdge(int u, int v) {
    if (find(u) == find(v)) return 0;
    if (sz[p[u]] + sz[p[v]] == n) return 0;
    if (deg[u] < 2 && deg[v] < 2){
        unite(u, v);
        deg[u]++;
        deg[v]++;
        return 1;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...