//并查集模板class UF { int count; int[] size; int[] parent; public UF(int n) { this.count = n; this.size = new int[n]; this.parent = new int[n]; for (int i=0; i<n; i++) { parent[i] = i; size[i] = 1; } } public int find(int x) { while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; } return x; } public void union(int p, int q) { int rootP = find(p); int rootQ = find(q); if (rootP == rootQ) { return; } if (size[rootP] > size[rootQ]) { parent[rootQ] = rootP; size[rootP] += size[rootQ]; } else { parent[rootP] = rootQ; size[rootQ] += size[rootP]; } this.count--; } public boolean isConnect(int p, int q) { int rootP = find(p); int rootQ = find(q); return rootP == rootQ; }}