# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1271992 | thuhienne | Game (IOI14_game) | C++20 | 0 ms | 0 KiB |
#include "game.h"
int root[1509],size[1509],edge[1509][1509],n;
//root i: dsu bth
//edge i j: da co bao nhieu canh duoc hoi giua 2 tplt co i lam root va j lam root
void initialize(int _n) {
n = _n;
for (int i = 1;i <= n;i++) root[i] = i,size[i] = 1;
}
int hasEdge(int u, int v) {
int ru = getroot(u),rv = getroot(v);
edge[ru][rv]++;edge[rv][ru]++;
if (edge[ru][rv] == size[ru] * size[rv]) {
return 1;
root[ru] = rv;
for (int i = 1;i <= n;i++) {
edge[i][rv] += edge[i][ru];
edge[rv][i] += edge[ru][i];
}
} else return 0;
}