Submission #789011

#TimeUsernameProblemLanguageResultExecution timeMemory
789011YassirSalamaGame (IOI14_game)C++14
100 / 100
293 ms31948 KiB
#include "game.h"
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2000;
int par[MAXN];
int sz[MAXN];
int N;
int cnt[MAXN][MAXN];
void initialize(int n) {
    N=n;
    for(int i=0;i<=n;i++) par[i]=i,sz[i]=1;
    for(int i=0;i<MAXN;i++){
        for(int j=0;j<MAXN;j++){
            cnt[i][j]=1;
        }
    }
}

int find(int node){
    if(node==par[node]) return node;
    return par[node]=find(par[node]);
}
void merge(int a,int b){
    a=find(a);
    b=find(b);
    if(a==b) return;
    for(int i=0;i<N;i++){
        cnt[a][i]+=cnt[b][i];
        cnt[i][a]+=cnt[i][b];
    }
    par[b]=a;

}
int hasEdge(int u, int v) {
    int a=find(u);
    int b=find(v);
    if(cnt[a][b]==1){
        merge(a,b);
        return 1;
    }
    cnt[a][b]--,cnt[b][a]--;
    return 0;
}


// int read_int() {
//     int x;
//     assert(scanf("%d", &x) == 1);
//     return x;
// }

// int main() {
//     int n, u, v;
//     n = read_int();
//     initialize(n);
//     // cout<<n<<endl;
//     for (int i = 0; i < n * (n - 1) / 2; i++) {
//         u = read_int();
//         v = read_int();
//         // cout<<u<<" "<<v<<endl;
//         printf("%d\n", hasEdge(u, v));
//     }
//     return 0;
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...