Submission #674824

#TimeUsernameProblemLanguageResultExecution timeMemory
674824bashkortGame (IOI14_game)C++17
100 / 100
349 ms25180 KiB
#include "game.h"
#include <bits/stdc++.h>

using namespace std;

constexpr int N = 1500;

int p[N], e[N][N], n;

int leader(int x) {
    while (x != p[x]) x = p[x] = p[p[x]];
    return x;
}

bool unite(int x, int y) {
    x = leader(x), y = leader(y);
    if (x == y || e[x][y] > 1) {
        if (x != y) {
            e[x][y] -= 1;
            e[y][x] -= 1;
        }
        return false;
    }
    p[y] = x;
    for (int to = 0; to < n; ++to) {
        if (to != x) {
            e[x][to] += e[y][to];
            e[to][x] += e[to][y];
        }
    }
    return true;
}

void initialize(int n) {
    ::n = n;
    iota(p, p + n, 0);
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j < n; ++j) {
            e[i][j] = e[j][i] = 1;
        }
    }
}

int hasEdge(int u, int v) {
    return unite(u, v);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...