Submission #1363277

#TimeUsernameProblemLanguageResultExecution timeMemory
1363277toma_ariciuGame (IOI14_game)C++20
100 / 100
149 ms15888 KiB
#include <bits/stdc++.h>
#include "game.h"

const int maxN = 1505;

int N;
int boss[maxN];
int edgesLeft[maxN][maxN];

void initialize(int n) {
    N = n;
    for (int i = 0; i < N; i++) {
        boss[i] = i;
    }
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            edgesLeft[i][j] = (i != j);
        }
    }
}

int hasEdge(int u, int v) {
    u = boss[u];
    v = boss[v];
    if (u == v) {
        return false;
    }
    if (edgesLeft[u][v] > 1) {
        edgesLeft[u][v]--;
        edgesLeft[v][u]--;
        return false;
    }
    boss[v] = u;
    for (int i = 0; i < N; i++) {
        if (boss[i] == v) {
            boss[i] = u;
        }
        if (boss[i] != i || i == u) {
            continue;
        }
        edgesLeft[u][i] += edgesLeft[v][i];
        edgesLeft[i][u] += edgesLeft[i][v];
        // assert(edgesLeft[u][i] == edgesLeft[i][u]);
    }
    return true;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...