【复习记录】并查集

来源:互联网 发布:软件授权码破解 编辑:程序博客网 时间:2024/05/17 06:01

概念

并查集是一种树形的数据结构,处理集合的合并和查询。最基础的并查集问题就是关于亲戚关系的问题。

实现及优化

并查集的实现包括预处理、查询根节点、合并以及判断。
其中预处理是把所有点的父亲都指向自己,每个点的深度初始化为0.
查询根节点时用一行标准的路径压缩即可,将一棵树变成了菊花图。
另一个优化是按秩合并,将深度较小的树的父亲指向深度较深的树。但是有些情况下按秩合并并不适用,比如区间染色问题,只能按照一个方向染色。

应用

由于有更高深的应用,所以可能不会考亲戚关系这种赤果果的并查集。
应用的各种姿势:

1、虚点思想

例题:codevs 1069 关押罪犯

呐~现在才想明白这个

这是样例:
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
排序之后:
1 2 28351
3 4 12884
1 3 6618
2 3 3512
……后面用不到
合并过程:
①:1∈2+n,2∈1+n;
②:3∈4+n,4∈3+n;
③:1∈3+n,3∈1+n;
接下来应该合并2和3,但是发现第①步和第③步已经将2和3分别跟1合并过了,所以从这里开始不合法。
好智障啊QWQ
虚点的时候要开两倍的并查集,初始化的时候for到n*2.

2、区间染色问题

例题:codevs 1191 数轴染色
洛谷 2898 [USACO08JAN]haybale猜测Haybale Guessing
对一段区间进行染色时,将这段区间内的所有点都合并到左端点的左边或右端点的右边。这样很机智地避免了重复合并。
区间染色问题不能使用按秩合并

3、

原创粉丝点击