图论-并查集
AcerMo
一只辣鸡大学生
展开
-
洛谷 P3367 并查集【模板】
并查集是图论部分一个比较有用的算法,它可以实现查询两个元素是否存在于同一集合或者将某两个集合合并;思想: 开始时将每个元素看做一个独立的集合,并建立一个father数组存放每个集合的公共祖先,每次执行合并操作时,将新加入元素的祖先设定为要加入集合的公共祖先,查询两个元素时只需要判断两个元素的祖先是否相同即可例题:查询两个元素是否在统一集合或者合并两元素样例解释先初始化fathe...原创 2018-02-25 20:45:22 · 256 阅读 · 0 评论 -
BZOJ3211&&洛谷P4145 上帝造题的七分钟2/花神游历各国
思维题树状数组+并查集维护思路发现最大数101210^{12}1012开根号最大也就开1012−>106−>103−>31−>5−>2−>110^{12}->10^{6}->10^3->31->5->2->11012−>...原创 2018-10-12 07:51:26 · 243 阅读 · 0 评论 -
BZOJ1370&&洛谷P1892 [BOI2003]团伙
并查集我们将a的敌人定义为a+n,b的敌人的定义为b+n,所以a与b+n是一类人,b与a+n是一类人,然后就这么合并就好了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream> #include<algorithm&g...原创 2018-09-11 08:22:27 · 268 阅读 · 0 评论 -
BZOJ5194&&洛谷P4269 [USACO18FEB]Snow Boots G
假装是贪心我们将地砖按照积雪厚度从大到小排序,靴子按照能踩的厚度从大到小排序,然后对于每双靴子,比较它能跑的长度与当前图中最长的连续一段厚度大于它的承受力的长度,若比 连续一段长,则能走完全程,如何找到连续一段?我们用并查集,每次判断当前枚举到的地砖的dep是不是大于靴子的dep,因为两者都是从大到小枚举的,所以当前的都不会对之前产生影响,但是地砖深度 大于当前靴子,那么一定大于后面的靴子,所...原创 2018-09-19 09:53:41 · 268 阅读 · 0 评论 -
CF722C Destroying Array
并查集离线处理删点=加点我们每加进来一个点,就把它和他左边以及右边的数连起来,然后取max,连起来这个操作需要用到并查集,fa处存储这一串的sum值代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include&...原创 2018-09-03 16:57:56 · 593 阅读 · 0 评论 -
BZOJ4320ShangHai2006 Homework
一开始没有搞懂为何要分块,300000^2多好啊好吧继续,我们不难发现,在M范围内,最大就到sqrt(m)有sqrt(m)个倍数然后就分了个块,然后不要着急,还没说正解呢我们用一个并查集维护,小于等于300的询问我们暴力修改,然后对于出现过的x,fa[x]=x,没出现过的fa[x]=x+1,然后我们就成功的弄到了一个只含有出现过的数字的链,然后我们对于每个询问,只需要查询mod这个询问或询...原创 2018-09-01 08:55:38 · 226 阅读 · 0 评论 -
BZOJ4668 冷战
一道并查集好题,用到了启发式合并,也就是传说中的按秩合并,但是这道题不能用路径压缩,为什么我们之后说先说如何确定连接两个块的时间,我们用一个vis数组存一个时间,我们在按秩合并时,每次相当于给一棵siz大的树接上一棵小子树,那么以后再有连接到小子树的边,只会连接到大树上,所以小子树的vis确定为当前边的编号后,就不会再变,所以就放心了,查询的时候呢?我们不难想到LCA,两个点之间只有一条简单路...原创 2018-08-16 19:33:29 · 263 阅读 · 0 评论 -
BZOJ1854&&洛谷P1640 [SCOI2010]连续攻击游戏
老早做得题了,一直没有发博客,当时纠结什么叫二分图匹配,然后发现这道题有并查集做法,当时也不是很明白,现在重新做了一遍思路是读入每个装备的属性后,从小属性向大属性连边,画个图,发现能连续攻击的一段是一个由至少n-1条边构成的环,人、、每次向大属性连边,给小属性的vis=1,然后不难发现,若只有n-1条边,那么就只有n-1个点vis=1,只剩最后一个点,当边数大于n-1时,必然有自环,这时两者f...原创 2018-08-03 08:33:56 · 199 阅读 · 0 评论 -
BZOJ1015&&洛谷P1197 [JSOI2008]星球大战
离线并查集代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int M=400005;int n,m,fa[M],t...原创 2018-08-01 15:03:55 · 203 阅读 · 0 评论 -
BZOJ1529&&洛谷P3420 [POI2005]SKA-Piggy Banks
并查集的裸题我们不难发现,若存在一些小猪比如说1->2,2->3,3->4那么我们只需要打开4,那么之前的1,2,3都能被打开,所以我们可以将钥匙看成两头猪之间的边,将两头猪合并到一个并查集里,那么这个并查集只要有一个猪被打开 ,那么整个联通块就都能打开了,所以说我们可以边读入边合并,最后数一下联通块个数就好,据说还有tarjan做法,也是统计联通块个数233,缩点之后统计有...原创 2018-07-19 21:21:11 · 196 阅读 · 0 评论 -
BZOJ1050&&洛谷P2502 [HAOI2006]旅行
这道题一眼看过去,应该是最小生成树没错了,我们可以暴力的枚举一下选哪些边,期望得分40~50正解是什么呢?我们将边按照边权排序,因为我们要在保证联通的条件下,使得costmax/costmin最小,所以我们要让最小边尽量大的情况下,使得最大边尽量小,如何实现呢?我们发现,因为边权数组已经排好序,所以权值是递增的,所以我们可以选择一些小边权的边不选,看是否还能连通,这样就可以实现在最小边扩大的同时,...原创 2018-07-12 20:18:09 · 243 阅读 · 0 评论 -
BZOJ1116&&洛谷P3465 [POI2008]CLO-Toll
并查集+dfs定向我们根据两个点是不是在同一个连通块来连边,通过并查集判环,显然只有图中存在环的时候,才会满足题意代码(因为BZOJ并不要求输出方案,所以洛谷的输出方案看看就好,主要是并查集判环)//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream&...原创 2018-07-12 19:28:18 · 257 阅读 · 0 评论 -
BZOJ4668冷战
看见题面我就想关掉emmm,文科。。。还是初中历史,说多了都是阴影面积。。。乍一看,emm?不会啊,看看能不能暴力乱搞,然后我们发现,题中询问最早的操作,那么我们不难发现,在保证留下最早的边并且联通的情况下,最后会连出一棵树,所以我们肯定会想到用并查集啥的维护连通性,但如何知道是哪个操作连接的两个联通块呢?不难发现,按照并查集的操作,我们只会对祖先进行操作,内部的点并不会被影响,所以我们想到了...原创 2018-07-18 16:47:48 · 292 阅读 · 0 评论 -
BZOJ1620&&洛谷P2920 [USACO08NOV]时间管理Time Management
emm贪心题,但不知道怎么让我搞成了并查集先将数组按结束时间排序,因为肯定先安排靠后的工作,后面处理时冲突会减小很多然后如何并查集乱搞呢?假如下图是一个没有加入任务的时间线{{20,5},{15,4},{12,3},{10,1},{5,2}}这是排好序的数组,左边元素是结束时间开始:20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1加入第一组任务,...原创 2018-07-03 15:40:26 · 313 阅读 · 0 评论 -
CF209C Trails and Glades[欧拉回路]
欧拉回路的好题emm题意:一张n个点,m条边的无向图,问你最少需要添加多少条边,能使得当前图存在欧拉回路思路:我们根据欧拉回路的性质,肯定要先求出图中所有点的度数,若一个点是奇数入度,那么我们必定要凑成偶数,然后我们不难发现,把所有的点划分成联通块,一个连通块的包含奇度数点,那么他可以和另一个联通块内的奇度数点直接相连,花费为一条边,若不包含,则需要两条边来连接外界,所以我们可以得出两种情况1.图...原创 2018-07-09 10:21:53 · 239 阅读 · 0 评论 -
BZOJ4551&&洛谷4092[HEOI/TJOI2016]树
中文题意不再赘述,说一下大体思路网上流传的做法是并查集和树链剖分,我太弱只会并查集,这道题正常思路的并查集肯定做不了,因为要维护一个动态的关系,回想一下,之前我发过的一片博文亲戚,里面用到了并查集的离线处理,就是先将所有操作读入,需要修改的操作都做掉,然后从最后一个操作开始往回做,修改也就是说删边往回做的时候相当于加边,加边总比删边简单,所以离线倒序处理并查集就好,然后呢,这道题又有和一般并查集不...原创 2018-06-17 18:18:23 · 204 阅读 · 0 评论 -
RBQOJ727亲戚
先安利一波好oj->这里【问题描述】老爸出差了,你和你的妈妈准备去走人家,但是你的亲戚们数量太多了,关系网过於庞大,要判断两个是否是亲戚,确实还很不容易,现在给出一些消息,你想知道某两人是否是亲戚关系规定:如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚,如:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。但是由于亲戚们的感情并不是总是那么好的,所以随时会出现反目的现象。倘...原创 2018-06-16 22:26:05 · 283 阅读 · 0 评论 -
BZOJ1202&&洛谷P2294 [HNOI2005]狡猾的商人
差分约束 or 带权并查集思路假如我们给定了a−&gt;b,a−&gt;ca-&gt;b,a-&gt;ca−>b,a−>c现在又给你b−&gt;cb-&gt;cb−>c你是不是就可以直接判断这条句子是不是假的了?我们用带权并查集维护两个元素之间的距离,然后每次发现有俩元素在同一个集合 ,就判断一下是不是满足d[x]−d[y−1]...原创 2018-10-24 19:29:15 · 272 阅读 · 0 评论