public void Union(int p, int q) {
int rootP = Find(p);
int rootQ = Find(q);
if (rootP == rootQ) {
return;
}
// make smaller root point to larger one
if (sz[rootP] < sz[rootQ]) {
id[rootP] = rootQ;
sz[rootQ] += sz[rootP];
}
else {
id[rootQ] = rootP;
sz[rootP] += sz[rootQ];
}
count--;
}
}