并查集java实现
class UnionFind{
private int count;
private int[] parents;
private int[] size;
public UnionFind(int n) {
count = n;
parents = new int[n];
size = new int[n];
for (int i = 0; i < n; ++i) {
parents[i] = i;
size[i] = 1;
}
}
public int find(int x) {
while (x != parent[x]) {
parent[x] = parent[parent[x]];
x = parent[x];
}
return x;
}
public boolean union(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return false;
if (size[x] < size[y]) {
int tmp = x;
x = y;
y = tmp;
}
parents[y] = x;
size[x] += size[y]
-- count;
return true;
}
public int getCount() {
return count;
}
}