并查集(不相交集)的Union操作

在并查集(不相交集)中附加操作\(Deunion\),它实现的功能是取消最后一次\(Union\)的操作。

实现思想

初始化一个空栈,将每一次的\(Union\)操作的两个集合的根和其值\(Push\)入栈;若执行\(Deunion\)操作时,只需要对栈进行\(Pop\)操作即可。在没有路径压缩时,这个策略是有效的;若并查集(不相交集)实现了路径压缩,将使得\(Deunion\)操作很难进行,因为路径压缩有很大的概率将本来属于一个根下的元素连接到另一个根,若此时执行\(Union\)操作时,很难将其恢复。

原文地址:https://www.cnblogs.com/geekfx/p/12259566.html

时间: 2024-10-08 16:48:16

并查集(不相交集)的Union操作的相关文章

HDU 2473 Junk-Mail Filter 并查集,虚拟删除操作

给定两种操作 第一种是合并X Y 第二种是把X分离出来,就是从原来的集合中分离出来,其它的关系不变. 关键是怎么分离,可以考虑把它变成一个其它值.HASH[i] = other_val 然后用新值去做并查集即可. 需要注意的一点就是 加入现在根是1,fa[1] = 1, fa[2] = 1, fa[3] = 1 那么如果你删除了1,这应该输出2.但是现在是fa[2] = 1,是一个不存在的根了,这个时候ans应该+1,但是按照并查集的思路 if (find(HASH[i]) == HASH[i]

UVa 11987 Almost Union-Find(支持删除操作的并查集)

传送门 Description I hope you know the beautiful Union-Find structure. In this problem, you’re to implement something similar, but not identical. The data structure you need to write is also a collection of disjoint sets, supporting 3 operations: 1 p q

并查集(Union Find):实现及其优化(c++)

1.什么是并查集 并查集是用来管理元素分组的数据结构.可以高效进行如下操作: 查询元素a.b十是否在同一组 合并a.b所在的组 并查集可以进行合并操作但不能进行分割操作. 2.并查集的结构 并查集采用多叉树形结构实现,每个元素对应一个结点,每个组对应一棵树.重点关注结整体形成一个树形结构,而不是树的形状等信息. 3.并查集的实现 3.1 初始化 对于并查集,一般采用数组来实现,其中元素为数组的索引,其父辈为数组索引对应内容. 在初始化中,将每个元素父辈设为自己,即自己形成一组,并对用一个rank

并查集的简介

最近做题用到了并查集索性就把自己所掌握的相关知识总结一下. 并查集(union-find sets),CLRS上称为disjoint-set,是一组不相交的动态集合S1,S2,....Sk.它能够实现较快的合并和判断元素所在集合的操作,应用比较广泛,如其求无向图的连通分量个数,利用Kruskar算法求最小生成树等.它的主要操作为分为三部分: 1.初始化集合,Make_set().即将数组中每个元素单独划分成一个个集合,也就是每个元素的祖先节点(和父亲节点)是它本身.假设数组P用来存所有节点,则可

并查集(union-find set)与Kruskal算法

并查集 并查集处理的是集合之间的关系,即‘union' , 'find' .在这种数据类型中,N个不同元素被分成若干个组,每组是一个集合,这种集合叫做分离集合.并查集支持查找一个元素所属的集合和两个元素分别所属的集合的合并. 并查集支持以下操作: MAKE(X):建立一个仅有成员X的新集合. UNION(X,Y):将包含X和Y的动态集合合并为一个新集合S,此后该二元素处于同一集合. FIND(X):返回一个包含X的集合. 注意:并查集只能进行合并操作,不能进行分割操作. 并查集的实现原理 并查集

并查集(2)-按秩合并和路径压缩

在上面一讲是并查集(1)-判断无向图是否存在环. 我们使用了并查集的两个操作: union() 和 find() // find 的原始实现 int find(int parent[], int i) { if (parent[i] == -1) return i; return find(parent, parent[i]); } // union()的原始实现 void Union(int parent[], int x, int y) { int xset = find(parent, x

并查集及应用

在信息学竞赛中,并查集是一种不可忽视的一部分内容,把最近几年的NOI和NOIP复赛题目大致浏览了一遍,发现有好几道应用并查集的题目,因此本文由浅入深的介绍并查集在编程中的巧妙应用. 什么是并查集?并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.常常在使用中以森林来表示.集就是让每个元素构成一个单元素的集合,并就是按一定顺序将属于同一组的元素所在的集合合并. 并查集的主要操作: 1.初始化:把每个点所在集合初始化为其自身: 2.查找:查找元素所在的

UVA - 11987 Almost Union-Find(带删除的并查集)

Almost Union-Find Time Limit: 1000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description Problem A Almost Union-Find I hope you know the beautiful Union-Find structure. In this problem, you're to implement something simil

PAT Advanced 1034 Head of a Gang (30) [图的遍历,BFS,DFS,并查集]

题目 One way that the police finds the head of a gang is to check people's phone calls. If there is a phone call between A and B, we say that A and B is related. The weight of a relation is defined to be the total time length of all the phone calls mad

PAT Advanced 1107 Social Clusters (30) [并查集]

题目 When register on a social network, you are always asked to specify your hobbies in order to find some potential friends with the same hobbies. A "social cluster" is a set of people who have some of their hobbies in common. You are supposed to