Submission #577594

#TimeUsernameProblemLanguageResultExecution timeMemory
577594jack715Game (IOI14_game)C++14
15 / 100
1 ms220 KiB
#include "game.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pp pop_back
#define mp make_pair
#define bb back
#define ff first
#define ss second

using namespace std;

vector<vector<int> > cnt;
vector<int> par;
int n;

int find(int a) {
    if (par[a] == a)
        return a;
    return par[a] = find(par[a]);
}

void merge(int a, int b) {
    par[b] = a;
    for (int i = 0; i < n; i++) {
        if (i == a || i == b) continue;
        cnt[a][i] += cnt[b][i];
        cnt[i][a] += cnt[b][i];
        cnt[b][i] = 0, cnt[i][b] = 0;
    }
}

void initialize(int N) {
    n = N;
    par.resize(n), cnt.resize(n, vector<int>(n));
    for (int i = 0; i < n; i++)
        par[i] = i;
    for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
        cnt[i][j] = 1;
}

int hasEdge(int u, int v) {
    if (par[u] == par[v]) return 1;
    cnt[par[u]][par[v]]--;
    cnt[par[v]][par[u]]--;
    if (cnt[par[u]][par[v]] == 0) {
        merge(par[u], par[v]);
        return 1;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...