![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
run around
这个作者很懒,什么都没留下…
展开
-
可撤销并查集
可撤销并查集是支持后悔操作的并查集,注意这时写并查集一定要按秩合并,路径压缩会改变节点与节点之间的关系,改了这个关系那就没法回退了。思路:用一个栈维护每次操作更新的节点,回退时找到那两个回退即可。注意一定是后操作的先反悔。int parent[maxn],siz[maxn]; //按秩合并用siz,siz小的连向siz大的 vector<pii> tmp; //记录上次合并用到的节点 int find(int p) //递归找根节点,注意没有路径压缩 { if(原创 2021-01-20 22:41:33 · 3384 阅读 · 0 评论 -
并查集的基本使用
并查集用于快速的分类和查找,处理一些不相交集合的合并与查询基本的操作:1. 初始化,把每个值对应的集合都设为自己2. 合并,把一个集合合并到另一个上3. 查询,本博客采用路径压缩算法实现查询的操作,查找元素在集合中对应的集合位数#include <iostream>using namespace std;#define max 1000000int parent[ma...原创 2019-04-30 21:43:45 · 165 阅读 · 0 评论 -
不同种类的并查集处理(poj1703 种类并查集)
题目大意:已知所有元素要么属于第一个集合,要么属于第二个集合,给出两种操作。第一种是D a b,表示a,b两个元素不在一个集合里面。第二种操作是A a b,表示询问a,b两个元素是否在同一个集合里面。如果不能确定的话打印not sure。否则给出答案。题目分析:平常我们做的并查集都是用来放相同集合的,这道题给我们不同集合的。这题有两种方法,一种是开两倍的数组,另一种就是种类并查集方法一:...原创 2019-05-27 23:26:03 · 388 阅读 · 1 评论