Submission #719747

#TimeUsernameProblemLanguageResultExecution timeMemory
719747hoainiemGame (IOI14_game)C++14
100 / 100
454 ms25420 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
int N, par[1508], a[1508][1508];
vector<int>ds[1508];
int root(int x){
    return (par[x] < 0) ? x : (par[x] = root(par[x]));
}
void join(int u, int v){
    if ((u = root(u)) == (v = root(v)))
        return;
    if (par[u] > par[v])
        swap(u, v);
    par[u] += par[v];
    par[v] = u;
    for (int tmp : ds[v])
        ds[u].push_back(tmp);
    ds[v].clear();
}
void initialize(int n) {
    N = n;
    for (int i = 0; i < N; i++){
        par[i] = -1;
        ds[i].push_back(i);
    }
}

int hasEdge(int u, int v) {
    a[u][v]++;
    a[v][u]++;
    u = root(u);
    v = root(v);
    assert(u != v);
    for (int i : ds[u])
        for (int j : ds[v])
            if (!a[i][j])
                return 0;
    join(u, v);
    return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...