先贴一个板子,感觉这个算法非常精妙。 //并查集 //初始化 for(int i=1;i<=n;i++){ p[i] = i; length[i]=1; } // 查看祖宗编号,即集合编号。 static int find(int x){ if(x!=p[x]) p[x] = find(p[x]);//并查集+压缩路径 return p[x]; } // 合并集合 static void merge(int x,int y){ //length[find(y)]+=getLength(x); 维护集合内的元素个数。 //d[px] = d[y]-p[x]; p[find(x)] = fi...