并查集 模板
并查集模板
#include<stdio.h> #include<iostream> const int N=1000; using namespace std; int ptr[N];// 结点的上级 int find(int x)//查找上级 { int r=x; while(pre[r]!=r)// 上级不是自己 { r=pre[r];//逐级上查 } int k = x,j; //暂存 结点 while(k != r)//掌门不是自己 非递归路径压缩操作 { j = pre[k]; //用j暂存pre[k]的父节点 pre[k] = r; //pre[x] 指向掌门 更换掌门 k = j; //k移到父节点 } return r;//直到找到 自己的上级 } int join(int x,int y)//并 上级 { int fx=find(x);//两个人的上级 int fy=find(y); if(fx!=fy) pre[fx]=fy;// 两个人把其中的一个人分到另一个人的门下 } int main() { return 0; }
岂曰无衣?与子同袍。王于兴师,修我戈矛。与子同仇!
岂曰无衣?与子同泽。王于兴师,修我矛戟。与子偕作!
岂曰无衣?与子同裳。王于兴师,修我甲兵。与子偕行!