Submission #162819

#TimeUsernameProblemLanguageResultExecution timeMemory
162819nickmet2004Game (IOI14_game)C++11
0 / 100
3 ms380 KiB
#include<bits/stdc++.h>
#include<game.h>

using namespace std;

const int NAX = 1505;

int P[NAX] , sz[NAX];
int used[NAX][NAX];

void make_set(){
    for(int i = 0; i < NAX; ++i){
        P[i] = i;
        sz[i] = 1;
    }
}
int Find(int x){
    return (P[x] == x) ? x : P[x] = Find(P[x]);
}
int Union(int u , int v){
    int U = Find(u);
    int V = Find(v);
    int edge = sz[U] * sz[V];
    int c1 = sz[U] , c2 = sz[V];
    int x = (c1 >= c2) ? c1 : c2;
    int y = (c1 < c2) ? c1 : c2;
    --used[x][y];
    if(edge + used[x][y] == 0){
        sz[x] += sz[y];
        P[y] = x;
        return 1;
    }
    return 0;
}

void initialize(int n){
    make_set();
}
int hasEdge(int u , int v){
    return Union(u , v);
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...