# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1130386 | Ak_16 | Game (IOI14_game) | C++17 | 0 ms | 0 KiB |
#include <iostream>
using namespace std;
int par[2000];
int siz[2000];
int cnt[160][160];
int fin(int x){
if(par[x]==x){return x;}
else {return fin(par[x]);}
}
int unite(int x, int y){
int xr = fin(x);
int yr = fin(y);
if(siz[xr]<siz[yr]){swap(xr, yr);}
par[yr] = xr;
siz[xr] += siz[yr];
}
void initialize(int n){
for(int i=1; i<=n; i++){
par[i] = i; siz[i] = 1;
}
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
cnt[i][j] = 0;
}
}
}
int hasedge(int u, int v){
u++; v++;
int n1 = fin(u);
int n2 = fin(v);
int n3 = siz[n1];
int n4 = siz[n2];
if(cnt[n1][n2] == n3 * n4 - 1){
unite(n1, n2);
return 1;
}
else {
cnt[n1][n2]++;
cnt[n2][n1]++;
return 0;
}
}