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... |