并查集模板 统计连通分量
package com.company;
public class bingchaji {
int count;
int[] parent;
int[] cnt;
public bingchaji(int n) {
parent = new int[n+1];
cnt = new int[n+1];
count=n;
for (int i = 0; i <= n; i++) {
parent[i]=i;
cnt[i]=1;
}
}
public static void main(String[] args) {
int[][] a = {{1,2},{2,3},{1,4}};
int n = 4;
bingchaji bin = new bingchaji(n);
for (int i = 0; i < a.length; i++) {
bin.union(a[i][0],a[i][1]);
}
System.out.println(bin.size(1));
System.out.println(bin.count);
}
private int size(int i) {
int father = find(i);
return cnt[father];
}
private void union(int x, int y) {
int i=find(x), j = find(y);
if(i==j) return;
parent[i]=j;
cnt[j]+=cnt[i];
count--;
}
private int find(int x) {
while(x!=parent[x])
{
parent[x]=parent[parent[x]];
x=parent[x];
}
return x;
}
}