- HDU 1811 Rank of Tetris
- 并查集+拓扑排序
- 利用并查集将实力相同的点缩成一个点再利用拓扑排序
- 模板题
- HDU 3938 Portal
- 并查集+离线输出
- 对Kruskal思想的深究
- 因为写这篇文章时的匆忙,我自己没有深究这道题,所以给一份好的题解http://blog.csdn.net/a054545641/article/details/52142157
- HDU 2473 Junk-Mail Filter
- 并查集+删除操作
- 这是一个经典的小技巧
- 因为并查集是树形结构,所以无法简单的把一个节点从一棵树中删去并维护原来的信息。那这里用到的思想就是还是保持原来的树的结构不变,只是把被删掉的那个点设为虚点,并新建一个点,把原来的点映射到这个新点上,代表以后的操作都是对这个新点进行操作。这样空间开销虽然大,但还是可以解决问题的。
- HDU 3172 Virtual Friends
- 一道简单题,带权并查集
- 注意输出即可
- HDU 3635 Dragon Balls
- 带权并查集
- 主要是需要记录移动次数稍微需要思考
- 修改一下并查集即可
- HDU 3926 Hand in Hand
- 因为题目的特殊性,所以本题判断可以使用并查集。
- 首先当然是并查集的一些基本操作了,不过合并的时候应该遵循孩子节点少的合并到孩子节点多的集合中(不然wa),然后就是排序后比较一下就可以了(因为图可能存在环,因此可以先按孩子节点的个数排,然后再按是否存在环排);
- HDU 3047 Zjnu Stadium
- 题目大意:给了n个人和m个关系,关系为a,b,x,意思是b的位置大于a的位置x,问条件依次下去的矛盾的条件的个数
- 带权并查集
- 注意计算公式的推导: r[bb]=r[a]+x-r[b]
- 拿张别人的图(感谢)
- HDU 3038 How Many Answers Are Wrong
- 种类并查集,不了解种类并查集的可以去看看
- [a, b]和为s,所以a-1与b就可以确定一次关系,通过计算与根的距离可以判断出询问的正确性
- HDU 2818 Building Block POJ 1988 Cube Stacking
- 带权并查集
- 我们用rank[x]表示x以下有多少个元素,那么对于指令M x y我们始终把左边的合并到右边,那么这样rank就满足压缩的性质
- 但是因为这边的合并和普通不一样,它是把x所在的集合放在y所在集合上面,实际上是x的跟节点合并到y集合的最远点,所以我们应该开个数组记录当前集合最远的点
- HDU 3234 Exclusive-OR(UVA12232 LA4487)
- 异或并查集
- 比较经典的一道并查集了
- r[a]记录的是a与其父亲节点的异或值, 通过并查集合并的过程同时更新路径上的r值 ,令fa,fb分别是a,b,的父亲节点
- 我们知道r[a] = a^fa,r[b]=b^fa,a^b=c
- 那么在合并fa,fb的时候,令fb为fa的父节点 ,那么就有r[fa]=fa^fb ,而r[a]=a^fa,所以fa=a^r[a] ,同理fb=b^r[b] ,所以r[fa] = r[a]^r[b]^a^b = r[a]^r[b]^c
- 当然对于一个节点合并问题不好解决,此时可以添加一个新节点n作为根节点,使得n的值为0,那么任何值与0的异或都是本身 。这样一来合并问题就解决了
- 然后对于查询而言,对于n是根节点的我们不需要考虑,但是对于不是以n为跟节点的,根节点的值被重复计算了,这个时候我们要统计根节点被统计的次数,如果是奇数次,那么必然是无法确定的了
- 好题啊!!!!!!!!!!!!!!!!!
- POJ 1182 食物链
- 经典并查集
- 有一个博客讲得很好,就不过多赘述了http://blog.csdn.net/niushuai666/article/details/6981689
- POJ 1733 Parity game
- 与之前有一道题类似
- 离散化之后就可以了
- POJ 1417 True Liars
- 并查集+DP
- 再次放大神博客http://blog.csdn.net/acm_cxlove/article/details/8092799
- 话说输出方案真的恶心啊
- POJ 2912 Rochambeau
- 枚举+并查集
- 食物链加强版
- POJ 3228 Gold Transportation
- 很多人这道题是用二分+网络流做的
- 但是用并查集要快很多,是道好题
- 这种好题怎么能放题解呢,HoHo
- ZOJ 3261 Connections in Galaxy War 并查集
- 逆向并查集
- 把没有删除的边先加入并查集,一个集合内表示连通的,根结点为权值最大的点。
- 然后对于查询离线读入,从最后开始操作,对于删除的点,然后重新加入到并查集中,更新最值。
-
- 查询的时候便是查询根结点的值是否大于自身的值
以上一共有16道题,如果能全部做完的话想必是大有裨益的,加黑体的或是比较重要的,或是比较有思考难度的。
总而言之,这16道题几乎已经涵盖完了所有种类的并查集,还请努力吧。