
并查集
文章平均质量分 64
数据结构---并查集
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
算法竞赛进阶指南 0x49(并查集) 石头剪子布
题面题解我用的是带边权的并查集,那么就要维护到祖宗节点的距离,我们用上图的关系来表示两个人之间的关系(d[x]-d[y])%3==1 说明 x > y ,题中说还有裁判,那么我们就枚举裁判,然后开始判断条件做并查集,遇到有关裁判的,直接跳过,因为裁判可以任意出,一定是没有矛盾的,否则,如果两个人不在一个集合,就按大小关系合并,然后维护到祖宗节点的距离;对于在一个集合中的,就判断是否与之前矛盾,如果与之前有矛盾,说明枚举的裁判不符合,跳出循环枚举下一个,如果所有条件都符合,就说明这个人可原创 2021-04-09 10:23:07 · 531 阅读 · 0 评论 -
codeforces 1411 C Peaceful Rooks (并查集判环)
题面题意给定一个 n * n 的棋盘,棋盘中有 m 个棋子(m < n),每个棋子都在不同的行和列,且每个棋子都可以进行水平和竖直方向的移动(移动过程中也要保证每个棋子都在不同的行和列),求最少移动多少次才能使得每个棋子位于棋盘的主对角线上。题解1.对于主对角线上(x == y),我们不需要移动 ,对于其他坐标的棋子,如果是没有(每个棋子都在不同的行和列)这个限制的话,我们只要移动一步即可2. 就像图中蓝色点和绿色点这两个部分,就不能通过一步移动到主对角线上,就拿蓝色点来说,我原创 2021-02-26 18:52:00 · 1364 阅读 · 4 评论 -
算法竞赛进阶指南---0x41(并查集)Parity game
题面输入样例1051 2 even3 4 odd5 6 even1 6 even7 10 odd输出样例3题解嗯。。。。想不出来什么引导过程,直接上题解吧,我们先来推导一个性质,设Si 表示前i个数中1的个数,那么设 S[l,r] 中 有奇数个1 ,我们就可以推出Sr 与 Sl-1 的奇偶性不同。这个应该很好理解吧,就是不论一个数是奇数还是偶数,加上一个奇数,就会变(奇+奇=偶,偶+奇=奇),这样我们就将区间的奇偶转化成了两个边界的奇偶,当然这里是l-1和r 之间的奇偶原创 2021-02-16 16:39:26 · 516 阅读 · 1 评论 -
并查集经典题型------食物链(java版)
操作 将两个集合合并 询问两个元素是否在一个集合中 基本原理 每个集合用一颗树表示,树根的编号就是整个集合的编号 每个节点储存它的父节点,p[x]表示x的父节点 问题解决 如何判断树根: if(p[x]==x) 如何求x的集合编号 while(p[x]!=x){ x=p[x]; }原创 2020-11-20 20:02:45 · 641 阅读 · 0 评论 -
算法竞赛进阶指南---0x41 (并查集) 程序自动分析
题面题解很明显的并查集,并查集是将有关联的(相等,连通,吃与被吃)元素放入到一个集合中进行维护(集合大小,到祖宗节点的距离),之后对集合或集合之间的关系进行询问。我们可以发现约束条件的顺序不影响最后的结果,因此我们可以先将所有相等的约束条件放入集合中维护(合并),然后再判断不相等的约束条件是否在一个集合中,如果在一个集合中,就矛盾,因为在一个集合中表示的是相同的约束条件。看本题的数据范围,数据范围最大达到1e9 ,而个数只达到1e6,所以要进行离散化之后,再放入集合中维护代码#in原创 2021-01-31 22:03:31 · 552 阅读 · 0 评论 -
算法竞赛进阶指南---0x41 (并查集) 银河英雄传说
题面题解题中有两种操作方式,一种是合并两个集合,一种是询问集合中元素的关系(距离),那就是并查集,而且是要维护到祖宗节点距离的并查集先看查询操作,我们可以用一个d[x] 数组维护 x 到 p[x] 的距离 ,在每次 find(x) 操作之后 +路径压缩,那么x到p[x] 的距离就是 x 到祖宗节点的距离,如果两个战舰x,y在同一个集合中,abs(d[x]-d[y])-1不就是两个战舰之间还有多少个战舰,如果不在就返回-1接下来就考虑如何维护 d 数组,也就是合并操作,假设合并两个战舰集合原创 2021-02-01 12:39:22 · 628 阅读 · 1 评论