并查集模板
1.初始化
void mem() { for(int i=0;i<n;i++){ pa[i] = -1; ran[i] = 0; } }
2.find函数找根节点
int find(int x) { int fx = x; while(pa[fx] != -1) fx = pa[fx]; return fx; }
3.连接函数
int Union(int x,int y) { int fx = find(x); int fy = find(y); if(fx == fy) return 1; //已连接,形成环了 if(ran[fx] > ran[fy]) //短的连接在长的下面 pa[fy] = fx; else if(ran[fy] > ran[fx]) pa[fx] = fy; else{ pa[fx] = fy; //高度相等时,被连接的父节点高度+1 ran[fy] ++; } return 0; }

浙公网安备 33010602011771号