定义:
并查集是一种树形的数据结构,用于处理一些不相交集合的合并及查询问题,因为在这样一个集合中,常常有多个不想交的集合作为子集合,所以又常常在使用中以森林来表示。
运用:
1)初始化:把每个点所在的集合都初始化为自身,代表自己成一个集合,与别人没有关系(在每次使用的时候只需要初始化一次)。
2)查找:查找元素所在的集合,也就是查找根节点。
3)合并:将两个元素所在的集合合并为一个集合,在此操作之前,先判断两个元素是否已经属于同一个集合。
并查集森林:
以根树来表示集合,每棵树表示一个集合,树中的节点对应每个人,每个节点包含了父节点指针,树的深度两个信息。合并集合只是将一个集合的根节点的父节点改为另一棵树的根节点。
下面是并查集的模版:
int fin(int x)
{
int r = x;
while(bi[r] != r)
r = bi[r];
return r;
}
void me(int x,int y)
{
int fx = fin(x);
int fy = fin(y);
if(fx != fy)
bi[fx] = fy;
}
并查集的路径压缩:
路径压缩实际上是在找完了根节点后,在递归回来的时候顺便把路径上元素的父亲指针都指向根节点。