🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 并查集 ## 定义 并查集是一种维护集合的数据结构,支持「合并」和「查找」两种操作,可用数组实现。 ### 数据结构 ```C++ // father[i] 表示元素 i 的父亲节点 // 同一个并查集只有一个根节点 int father[N]; ``` ## 基本操作 ### 初始化 ```C++ for(int i=1;i<=N;i++){ father[i]=i; // 令 father[i]=-1 也可 } ``` ### 查找 ```c++ // 返回 x 所在并查集的根节点 int findFather(int x){ while(x!=father[x]){ x=father[x]; } return x; } ``` ### 合并 ```c++ void Union(int a, int b){ int faA=findFather(a); int faB=findFather(b); if(faA!=faB) father[faA]=faB; } ``` ## 路径压缩 ```C++ int findFather(int x){ int a=x; while(x!father[x]){ x=father[x]; } // 把路径上经过的所有节点的父亲节点都改为根节点 while(a!=father[a]){ int z=a; a=father[a]; father[z]=x; } return x; } ```