最近写一些算法题总是碰到同一段代码:
int find(x)
{
if(father[x]!=x)
{
father[x]=find(father[x])
}
return father[x];
}
代码的形式就是上面的,因为之前没有看到算法导论上的不相交集合森林,所以并不熟悉这段代码,然后问了一下大牛,他指点说看算法导论第二版311页,正好是这段伪代码:
FIND_SET(x)
if x!=p[x]
then p[x]=FIND_SET(p[x])
return p[x]
这段代码的意思就是将相同属性的节点合并到一个树里面,而合并是一句话,即:
将a所在树的根节点的父节点改为b所在树的根节点。
百度上并查集有这样的一个例子:并查集的操作:
主要操作编辑
初始化
把每个点所在
集合初始化为其自身。