在并查集(不相交集)中附加操作$Deunion$,它实现的功能是取消最后一次$Union$的操作。 实现思想 初始化一个空栈,将每一次的$Union$操作的两个集合的根和其值$Push$入栈;若执行$Deunion$操作时,只需要对栈进行$Pop$操作即可。在没有 路径压缩 时,这个策略是有效的;若 ...
分类:
其他好文 时间:
2020-02-04 15:52:42
阅读次数:
88
一共有n个数,编号是1~n,最开始每个数各自在一个集合中。 现在要进行m个操作,操作共有两种: “M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作; “Q a b”,询问编号为a和b的两个数是否在同一个集合中; 输入格式 第一行输入整数n和m。 接下来 ...
分类:
其他好文 时间:
2020-01-26 17:36:52
阅读次数:
85
[acwing 240] 食物链 [并查集] "传送门" 题意 ABC三种动物,食物链构成一个环形,,给出M个关于彼此关系的描述,判断有多少个假话。 1 X Y表示同类 2 X Y表示X吃Y 思路 本题是并查集的一种比较新颖的用法,并查集一般用来维护集合,但是在这里主要是使用路径压缩来维护点和根之间 ...
直接干 1 #include<iostream> 2 #include<algorithm> 3 #include<climits> 4 using namespace std; 5 struct edge 6 { 7 int from,to,weight; 8 }a[100010];//存边 9 ...
分类:
其他好文 时间:
2020-01-26 12:58:41
阅读次数:
56
心得:看那个博客的时候,感觉很生动很形象,一下子就看懂了,在写那个题目的时候,按照给的方法来做,有问题,仔细检查之后,发现那个路径压缩函数好像没有用到,于是我就把第一次调用过的函数再调用一次,这样就可以知道有几个掌门了,emmm,这个题目我觉得只要细心,应该还是没问题的。 原理:就是把一个人用a[i ...
分类:
其他好文 时间:
2020-01-23 11:14:02
阅读次数:
81
合并不采用路径压缩,保证每次合并只修改一个节点的父亲,使当前版本与上一版本共用的节点尽可能的多 为防止并查集退化成链,采取按秩合并 $code$: ...
分类:
其他好文 时间:
2020-01-22 22:06:15
阅读次数:
80
左偏树可以用来维护可并堆(并查集加堆) 可以用并查集一样的路径压缩来优化复杂度 路径压缩后$fa$记录的就不为其原树中的父亲,而是用来表示堆与堆之间的关系 $dis:$表示该节点到它子树内最近的叶子节点的距离 节点的左儿子的距离不小于右儿子的距离,每次合并时,将一棵树合并到另一棵树的右子树,来保证复 ...
分类:
其他好文 时间:
2020-01-22 21:47:25
阅读次数:
68
某$OI$选手写的,其中一些观点看法让我受益颇深 启发式合并 #先来分类一般来说,$OI$中的名词大概分成这几大类.思想 : 模拟,贪心,动态规划,模型转换策略 : 固定策略,随机化策略,启发式策略算法 : … 显然在合并时使用启发式策略的算法,被称之为启发式合并. #定义形如在两个对象合并时,参考 ...
分类:
其他好文 时间:
2020-01-18 16:48:09
阅读次数:
106
我们知道,递归版路径压缩的实质就是在回溯过程中把沿途出现的爸爸变成兄弟,最终由N代同堂变成二代同堂。 所以我们可以利用这样的方法写出非递归路径压缩。 首先要找到根节点root,然后从当前位置出发寻找根节点,沿途得到的父亲节点father全部直接指向根节点。 如何得到沿途的父节点呢?当然是迭代啦! 1 ...
分类:
其他好文 时间:
2020-01-17 22:51:26
阅读次数:
104
"题目" ~~在某人的挑唆之下~~来做了这道题,说是路径压缩dp,然鹅我做完以后并没有发现什么和路径压缩有关的东西。 题目的意思大概就是给你一条数轴和一些石子,再给你每一次可以往前走的长度区间,求想要走完这条数轴最少需要经过多少个石子。 首先对于30%的数据,$L \leq 10000$,大概就是一 ...
分类:
其他好文 时间:
2019-12-29 10:56:12
阅读次数:
74