public void union(int p, int q) {
        int i = root(p);
        int j = root(q);
        if (i == j)
            return;
        if (siz[i] < siz[j]) {
            id[i] = j;
            siz[j] += siz[i];
        } else {
            id[j] = i;
            siz[i] += siz[j];
        }
        count--;
    }