并查集拓展和技巧(题目集)

本文介绍了并查集在多种问题中的应用,包括拓扑排序、离线输出、删除操作、带权并查集等,并提供了多个经典题目案例,如HDU 1811 Rank of Tetris、HDU 3938 Portal等,详细阐述了解题思路和技巧,是学习并查集算法的好资料。
摘要由CSDN通过智能技术生成

  1. HDU 1811 Rank of Tetris
    • 并查集+拓扑排序
    • 利用并查集将实力相同的点缩成一个点再利用拓扑排序
    • 模板题
  2. HDU 3938 Portal
  3. HDU 2473 Junk-Mail Filter
    • 并查集+删除操作
    • 这是一个经典的小技巧
    • 因为并查集是树形结构,所以无法简单的把一个节点从一棵树中删去并维护原来的信息。那这里用到的思想就是还是保持原来的树的结构不变,只是把被删掉的那个点设为虚点,并新建一个点,把原来的点映射到这个新点上,代表以后的操作都是对这个新点进行操作。这样空间开销虽然大,但还是可以解决问题的。
  4. HDU 3172 Virtual Friends
    • 一道简单题,带权并查集
    • 注意输出即可
  5. HDU 3635 Dragon Balls
    • 带权并查集
    • 主要是需要记录移动次数稍微需要思考
    • 修改一下并查集即可
  6. HDU 3926 Hand in Hand
    • 因为题目的特殊性,所以本题判断可以使用并查集。
    • 首先当然是并查集的一些基本操作了,不过合并的时候应该遵循孩子节点少的合并到孩子节点多的集合中(不然wa),然后就是排序后比较一下就可以了(因为图可能存在环,因此可以先按孩子节点的个数排,然后再按是否存在环排);
  7. HDU 3047 Zjnu Stadium
    • 题目大意:给了n个人和m个关系,关系为a,b,x,意思是b的位置大于a的位置x,问条件依次下去的矛盾的条件的个数
    • 带权并查集
    • 注意计算公式的推导: r[bb]=r[a]+x-r[b]
    • 拿张别人的图(感谢) 
  8. HDU 3038 How Many Answers Are Wrong
    •  种类并查集,不了解种类并查集的可以去看看
    • [a, b]和为s,所以a-1与b就可以确定一次关系,通过计算与根的距离可以判断出询问的正确性
  9. HDU 2818 Building Block   POJ 1988 Cube Stacking
    • 带权并查集
    • 我们用rank[x]表示x以下有多少个元素,那么对于指令M x y我们始终把左边的合并到右边,那么这样rank就满足压缩的性质
    • 但是因为这边的合并和普通不一样,它是把x所在的集合放在y所在集合上面,实际上是x的跟节点合并到y集合的最远点,所以我们应该开个数组记录当前集合最远的点
  10. 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为跟节点的,根节点的值被重复计算了,这个时候我们要统计根节点被统计的次数,如果是奇数次,那么必然是无法确定的了
    • 好题啊!!!!!!!!!!!!!!!!!
  11. POJ 1182 食物链
  12. POJ 1733 Parity game
    • 与之前有一道题类似
    • 离散化之后就可以了
  13. POJ 1417 True Liars 
  14. POJ 2912 Rochambeau
    • 枚举+并查集
    • 食物链加强版
  15. POJ 3228 Gold Transportation
    • 很多人这道题是用二分+网络流做的
    • 但是用并查集要快很多,是道好题
    • 这种好题怎么能放题解呢,HoHo
  16. ZOJ 3261 Connections in Galaxy War 并查集
    • 逆向并查集
    • 把没有删除的边先加入并查集,一个集合内表示连通的,根结点为权值最大的点。
    • 然后对于查询离线读入,从最后开始操作,对于删除的点,然后重新加入到并查集中,更新最值。
    • 查询的时候便是查询根结点的值是否大于自身的值

以上一共有16道题,如果能全部做完的话想必是大有裨益的,加黑体的或是比较重要的,或是比较有思考难度的。
总而言之,这16道题几乎已经涵盖完了所有种类的并查集,还请努力吧。



     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值