Submission #1352212

#TimeUsernameProblemLanguageResultExecution timeMemory
1352212waygonzGame (IOI14_game)C++20
0 / 100
1 ms2628 KiB
#include "game.h"
#include <bits/stdc++.h>

using namespace std;

int N, cnt = 0, par[1500];
bool valid[1500][1500];

int fp(int x) {
    if (par[x] == -1) return x;
    return par[x] = fp(par[x]);
}

void initialize(int n) {
    N = n;
    memset(par, -1, sizeof(par));
    memset(valid, true, sizeof(valid));
    for (int i = 0; i < n; i++) valid[i][i] = false;
}

int hasEdge(int u, int v) {
    cnt++;
    if (cnt == N * (N-1) / 2) return 1;
    int cu = 0, cv = 0;
    for (int i = 0; i < N; i++) {
        if (valid[i][u]) cu++;
        if (valid[i][v]) cv++;
    }
    if (cu == 1 || cv == 1) {
        int pu = fp(u), pv = fp(v);
        par[pu] = pv;
        for (int i = 0; i < N; i++) {
            if (pv != fp(i)) continue;
            valid[i][u] = valid[u][i] = valid[i][v] = valid[v][i] = false;
        }
        return 1;
    } else {
        valid[u][v] = valid[v][u] = false;
        return 0;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...