#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 = 0;i < n;i++) root[i] = i,size[i] = 1;
}
int getroot(int node) {
return (node == root[node] ? node : root[node] = getroot(root[node]));
}
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]) {
root[ru] = rv;
for (int i = 0;i < n;i++) {
edge[i][rv] += edge[i][ru];
edge[rv][i] += edge[ru][i];
}
return 1;
} else 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... |