This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "game.h"
#include<bits/stdc++.h>
using namespace std;
int ciudades[1501][1501];
int lim=0;
pair<int,int> conexion[1501];
void initialize(int n) {
    lim=n;
    for(int i=0;i<n;i++){
        conexion[i]={i,0};
        for(int j=0;j<n;j++){
            if(i==j) continue;
            ciudades[i][j]=1;
        }
    }
}
int buscar(int nodo){
    if(nodo!=conexion[nodo].first) conexion[nodo].first=buscar(conexion[nodo].first);
    return conexion[nodo].first;
}
void unir(int nodo1,int nodo2){
    conexion[nodo1].second=max(conexion[nodo1].second,conexion[nodo2].second+1);
    conexion[nodo2].first=nodo1;
}
int hasEdge(int u, int v) {
    int pos1=buscar(u);
    int pos2=buscar(v);
    if(ciudades[pos1][pos2]==1){
        ciudades[pos1][pos2]--;
        ciudades[pos2][pos1]--;
        if(conexion[pos2].second<conexion[pos1].second) swap(pos1,pos2);
        for(int i=0;i<lim;i++){
            ciudades[pos1][i]+=ciudades[pos2][i];
            ciudades[pos2][i]=0;
        }
        for(int i=0;i<lim;i++){
            ciudades[i][pos1]+=ciudades[i][pos2];
            ciudades[i][pos2]=0;
        }
        unir(pos1,pos2);
        return 1;
    }
    else{
        ciudades[pos1][pos2]--;
        ciudades[pos2][pos1]--;
        return 0;
    }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |