主要代码就三行
//初始化 for(int i=0;i<n;++i)f[i]=i; //查 static int findd(int x) { return (x==f[x])?x:(f[x]=findd(f[x])); } 或者: static int find(int x) { if(x!=f[x])f[x]=find(f[x]); return f[x]; } //并 static void unionn(int x,int y) { f[findd(x)]=findd(y); }