本人蒟蒻,只能靠题解AC,看到大佬们的解题思路,%%%%%% https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1−N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突. 我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多.如果两名怨气值为c 的罪犯被关押在同一监狱, 他们俩之间会发生摩擦,并造成影响力为c的…
题目链接 https://www.luogu.org/problemnew/show/UVA11987 分析 分析下操作发现就是加了个删除操作的并查集,怎么做删除操作呢. 我们用一个\(id[]\)记录每个数字在并查集中的编号,\(tot=n\),一开始\(id[i]=i\),当将\(p\)从原集合中删除时,让原来的\(id[p]\)变成一个虚点,\(id[p]=++tot\),这样就完成了删除操作,当然我们查找祖先时需要\(find(id[x])\) 推荐博客:https://blog.csd…
https://www.lydsy.com/JudgeOnline/problem.php?id=3673 https://www.lydsy.com/JudgeOnline/problem.php?id=3674 https://www.luogu.org/problemnew/show/P3402 这里最强的应该是BZOJ3674,于是接下来讲的内容和代码与BZOJ3674相同而非另外两道题,但核心思维完全一致. n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次…
题面 Bzoj 洛谷 题解 考虑离线做法,逆序处理,一个一个星球的加入.用并查集维护一下连通性就好了. 具体来说,先将被消灭的星球储存下来,先将没有被消灭的星球用并查集并在一起,这样做可以路径压缩,然后再将被消灭的星球倒着一个一个加入,然后在\(union\)的时候,如果两个元素不在同一个集合中,答案减一(最初答案为\(n\)),将每一阶段的答案存下来就行了. #include <cmath> #include <cstdio> #include <cstring> #…
问题描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多.如果两名怨气值为c的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c的冲突事件.每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到S城Z市长那里.公务繁忙的Z市长只会去看列表中的第一个事件的…
P3367 [模板]并查集 293通过 551提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 不知道哪错了 为啥通不过最后三个节点 题解 不懂为什么MLE 最后一个数据? 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入输出格式 输入格式: 第一行包含两个整数N.M,表示共有N个元素和M个操作. 接下来M行,每行包含三个整数Zi.Xi.Yi 当Zi=1时,将Xi与Yi所在的集合合并 当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y:否…
正解:并查集/树链剖分+线段树 解题报告: 传送门 感觉并查集的那个方法挺妙的,,,刚好又要复习下树剖了,所以就写个题解好了QwQ 首先说下并查集的方法趴QwQ 首先离线,读入所有操作,然后dfs遍历整棵树,如果当前点有标记就fa[i]=i,否则fa指向父亲节点 然后倒叙查答案,每次碰到Q答案就fa[i],碰到C就把修改的那个点的标记次数--,当标记次数=0的时候fa就指向父亲节点辣 over 484很妙昂! #include<bits/stdc++.h> using namespace st…
正解:并查集+离散化 解题报告: 传送门! 其实题目还挺水的,,,但我太傻逼了直接想挂了,,,所以感觉还是有个小坑点所以还是写个题解记录下我的傻逼QAQ 首先这题一看,就长得很像NOIp关押罪犯?然后就噼里啪啦打一个并查集上去,再随便离散化一下,就能获得90pts的好成绩,,,(因为数据太水了QAQ 然后考虑为什么不能用那题的套路?仔细思考下,用并查集的条件是什么? ——可传递性 简单来说,比如已知x=y,y=z,则必有x=z,所以这里可以用个并查集把他们缩成一块对趴 但这儿不光有x=y的条件,…
正解:倍增+并查集 解题报告: 传送门! 首先不难想到暴力?就考虑把区间相等转化成对应点对相等,然后直接对应点连边,最后求有几个连通块就好辣 然后看下复杂度,修改是O(n2)查询是O(n),就比较容易想到能不能通过一些技巧变成都是O(nlogn)的,再结合数据范围发现nlogn的复杂度似乎是对的 然后发现我们用的并查集嘛,并查集就有可合并性昂,看到有可合并性的,就要想到几种算法——倍增/线段树/balabala 但是可以发现线段树是不欧克的,因为线段树一定要按二进制划分开来,就会导致两个子节点的…
银河英雄传说 题意:在并查集的基础上,还要求出同一集合的两个点的距离 这道题用并查集自己是知道的,但是竟然可以这么骚的操作. 下面转自大佬的查详细题解 初见这道题,首先想到的方法当然是直接模拟,模拟每一次指令.当然这种方法对于小数据行得通,但对于此题的500,000个指令,肯定超时. 因此我们就要想其它方法. 先来分析一下这些指令的特点,很容易发现对于每个M指令,只可能一次移动整个队列,并且是把两个队列首尾相接合并成一个队列,不会出现把一个队列分开的情况,因此,我们必须要找到一个可以一次操作合并…