跳转至

并查集

向量偏移并查集(用带权并查集解决扩展域问题)

按秩合并

用栈记录 fx fy addsiz,可以实现撤销多步。

删边

开虚拟节点(假爹)

所有真实节点都连接到假爹上 通过假爹作为标志祖先建立连接

由于join()的实现是:

fa[find(i)] = find(j); //将i合并到j

而这里 j 的祖先是虚拟的
我们永远不删除虚拟的祖先 只更改真实节点的祖先
所以即使真实节点不再属于 j 祖先集合
也不影响 i 属于这个集合

删除 只需要新建一个新虚拟节点或利用空虚拟节点作为其祖先即可

并查集——简单易懂(内附并查集删除操作)_花心的boy的博客-CSDN博客_并查集删除元素


不进行路径压缩,我们可以实现\(O(1)\)删边。