并查集
定义
并查集是一种维护集合的数据结构,并:Union
,查:Find
,集:Set
。
并查集支持下面两种操作:
- 合并:合并两个集合
- 查找:判断两个元素是否在一个集合
并查集使用一个数组实现
int father[N];
其中 father[i] 代表元素 i 的父亲节点,而父亲节点本身也是这个集合内的元素。
如果 father[i] == i
说明元素 i 是该集合的根结点,但是对于同一个结合来说只存在一个根结点,且将其作为所属集合的标识
并查集的基本操作
一个实现
初始化father
数组,但我们通常还会初始化另外一个辅助的数据结构 height[N]
, 来记录每个结点的深度,以使得我们的并查集的效率不会太差,不会生成一个非常长高的单链。
初始化
#define N 1001
int father[N]; //记录父节点
int height[N]; //记录每个节点的高度
void Initial