UnionFind木
public class UnionFind{ int[] par; UnionFind(int n){ par=new int[n]; for(int i=0;i<n;i++)par[i]=i; } public int find(int x){ if(par[x]==x)return x; return par[x]=find(par[x]); } public Boolean same(int x,int y){ return find(x)==find(y); } public void unite(int x,int y){ if(find(x)==find(y))return; par[find(x)]=find(y); } }