![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并查集
文章平均质量分 73
Union-Find
逍遥Fau
为伊蕾娜献上心脏!
展开
-
AcWing4084 号码牌 (并查集 / bitset优化Floyd)
题目链接: 号码牌 大致题意 给定一个长度为nnn的序列, 第iii个位置的值为aia_iai. (保证aaa是111~nnn的一个排列) 每个位置还有一个值did_idi, 若满足∣i−j=di∣|i-j=d_i|∣i−j=di∣, 表示位置iii和位置jjj可以进行任意次交换. 问: 能否使得最终的序列满足ai=ia_i = iai=i. 解题思路 并查集 (数据太小了, 比赛时写了个Floyd) 由于两个位置的交换次数是任意次. 因此, 如果xxx和yyy可以交换, 且yyy和zzz可以交换原创 2021-12-05 10:13:55 · 482 阅读 · 0 评论 -
P2391 白雪皑皑 (并查集)
题目链接: P2391 白雪皑皑 大致题意 有nnn个位置, 初始每个位置都未被染色(初值为0). 接下来要进行mmm次染色操作, 第iii次把[l,r][l, r][l,r]染色为颜色iii. (后一次染色会覆盖前一次染色). 问: 最终每个位置的颜色是什么. 解题思路 并查集 由于后面的操作会覆盖掉前面的操作, 因此我们不妨 “倒着”进行染色. 我们如果保证每个位置只被访问一次的话, 这样我们就可以做到线性的复杂度. 我们通过并查集来维护, 对于位置iii而言, p[i]p[i]p[i]表示[i,n][原创 2021-10-29 18:41:26 · 451 阅读 · 0 评论 -
Codeforces1594D The Number of Imposters (并查集)
题目链接: The Number of Imposters 大致题意 有nnn个人, mmm个关系. 关系以a b c的形式给出, 当c==0c==0c==0时, 表示aaa说bbb是好人, 反之表示aaa说bbb是坏人. 好人只会说真话, 坏人只会说假话. 每个人只能是好人或坏人中的一种. 问: 这mmm对关系中是否存在矛盾, 如果有矛盾则输出"-1", 反之输出最大的坏人数量. 解题思路 并查集 (读完题一看, 这不是典中典?) 首先我们考虑ccc的不同取值下的情况: 对于a b 0的形式, 表示aaa原创 2021-10-09 15:34:19 · 714 阅读 · 0 评论 -
食物链(两种方法) (NEW)
题目链接: 食物链 大致题意 这题太经典了, 略! 解题思路 记录两种并查集方法: 扩展域和带权. AC代码1(扩展域做法) #include <iostream> #include <cstdio> #define rep(i, n) for (int i = 1; i <= (n); ++i) using namespace std; typedef long long ll; const int N = (5E4 + 10) * 3; //有几种, 则空间需要多开几倍 /原创 2020-11-09 23:28:55 · 383 阅读 · 0 评论 -
食物链
题目连接: 食物链 大致题意: 有三种动物, 共有N个, 组成A->B->C->A的食物链关系, 有k个说法, 让你判断其中的假话. 假话: ①前面的真话冲突 ②动物编号超过N ③同类吃同类 解题思路: 并查集. 维护集合中节点到根节点的距离(%3计算). 假设某种动物是0(根节点), 则吃他的生物为1, 被他吃的生物为2, 同类则也为0. (距离%3后的结果) 我们在进行判断的时候, 一定是判断当前这个生物与他所在集合中根节点的情况, 所以找查函数中, 我们必须要对每个节点进行路径压缩,原创 2020-07-12 23:13:13 · 146 阅读 · 0 评论