随笔分类 -  数据结构--并查集

摘要:题目 CF506D Mr. Kitayuta's Colorful Graph 给出一个无向图,每条边有颜色,每次询问两点间可以由多少种不同颜色的路径相互到达(要求路径上全是那一种颜色)。 分析 直接开一个 \(\text{unorderedmap}\) ,维护每一个点对应颜色的并查集父亲。 然后考 阅读全文
posted @ 2021-09-14 10:12 __Anchor 阅读(52) 评论(0) 推荐(0)
摘要:题目 CF292D Connected Components 给出一个图,每次删除其中一个区间内的边,询问剩下的边构成的图当中的连通块个数。 \(N\le 500,1\le M,K\le 10000\) 分析 维护一个前缀的并查集和后缀的并查集,然后可以考虑每次拿出两段来合并,于是就很容易了。 具体 阅读全文
posted @ 2021-09-14 09:44 __Anchor 阅读(49) 评论(0) 推荐(0)
摘要:题目 P5610 [Ynoi2013] 大学 分析 似乎是个简单题,容易想到势能分析,每一个点最多被除 \(\log\) 次。 于是问题变成快速找到一个数的所有倍数的位置。 直接对每一个数开一个 \(set\) 存其倍数集合,找到后可以判断是否删掉,也就是区间删除,可以并查集实现。 代码 #incl 阅读全文
posted @ 2021-08-20 19:46 __Anchor 阅读(61) 评论(0) 推荐(0)
摘要:题目 给定一个无向图,保证从1号点到所有点的最短路只有一条,现在对于每一个点询问:如果把1号点到这个点的最短路径的最后一条边断掉,那么到这个点的最短路变成了多少? 分析 首先我们发现最短路只有一条,其实就是在提示我们建出最短路树。 那么现在每一条树外面的边其实就有各自的贡献,对于一条边,它可以更新$ 阅读全文
posted @ 2021-06-25 20:28 __Anchor 阅读(65) 评论(0) 推荐(0)
摘要:题目 P7518 [省选联考 2021 A/B 卷] 宝石 分析 首先直接做好像并不好做,树剖什么的好像没什么用。 但是可以观察到我们可以把询问拆成两段,一段是 \(u\to x\) 另一段是 \(lca\to v\) 。(其中 \(x\) 是 \(lca\) 的 \(u\) 方向儿子) 那么我们可 阅读全文
posted @ 2021-04-29 21:20 __Anchor 阅读(60) 评论(0) 推荐(0)
摘要:CF351D Jeff and Removing Periods 首先需要想到的是一个结论: 对于一个区间,如果其存在某一个值的位置集合构成等差数列,那么这个区间的答案就是区间颜色个数,如果不存在(也就是说所有值的位置集合都不能构成等差数列),那么这个区间的答案就是区间颜色个数+1,原因显然。 正确 阅读全文
posted @ 2021-04-20 23:28 __Anchor 阅读(43) 评论(0) 推荐(0)
摘要:P5064 [Ynoi2014] 等这场战争结束之后(值域分块+并查集) 建出操作树,离散化,然后并查集+值域分块维护。 代码: #include<bits/stdc++.h> #define PII pair<int,int> using namespace std; template <type 阅读全文
posted @ 2021-04-16 16:00 __Anchor 阅读(62) 评论(0) 推荐(0)
摘要:P5443 [APIO2019]桥梁 和P3247 [HNOI2016]最小公倍数很像。 对于边来说同样是两维限制,但是时间轴已经自动有序。 所以我们还是可以考虑分块。 对于当前块内的询问,首先我们把所有在当前不需要改变的边存下来,然后对于每一个询问可以双指针扫描即可,对于当前块内的边,每次询问的时 阅读全文
posted @ 2021-04-16 10:51 __Anchor 阅读(99) 评论(0) 推荐(0)
摘要:P3247 [HNOI2016]最小公倍数 先考虑如果只有一个限制该怎么做。 一个简单的思路就是离线下来,然后排序过后双指针扫描加边和处理询问即可,用并查集维护。 或者每次询问的时候都暴力遍历所有边然后并查集。 那么现在有了两个限制,单独并不好做 考虑优化这个过程,我们可以先按 \(a\) 排序然后 阅读全文
posted @ 2021-04-16 10:27 __Anchor 阅读(89) 评论(0) 推荐(0)