并查集
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
-
【CF878E】Numbers on the blackboard(贪心)(并查集)
传送门怎么说呢。。。这个贪心,难以形容。。。题解:首先考虑全为正数的时候,显然就是贪心从尾部开始向前合并,全为负数的时候,显然就是贪心每次取头部两个合并。其实大胆猜想+证明可以得到这道题正确的贪心方式。注意到贡献的表示形如∑ai2ki\sum a_i2^{k_i}∑ai2ki,我们希望尽可能最大化正数的贡献。对于一个序列,从最后一个位置开始考虑。如果这个位置为正,与前面的合并,...原创 2019-11-11 16:20:42 · 254 阅读 · 1 评论 -
【校内模拟】坦克(平面图生成树)(并查集)(双指针)
简要题意:给平面上三个点集,其中第一个点集V1V_1V1中的点全部在第一象限,第二个点集V2V_2V2中的点全部在 xxx 轴上,第三个点集V3V_3V3中的点全部在第四象限。然后给两个无向边集,其中E1=V1×(V1∪V2)E_1=V_1\times (V_1\cup V_2)E1=V1×(V1∪V2),E2=V3×(V2∪V3)E_2=V_3\times (V_2\cup V...原创 2019-11-05 18:52:34 · 277 阅读 · 0 评论 -
【APIO2019】桥梁(并查集)(暴力)(根号分治)
传送门看了T2才知道今年供题是Russia。有一次在CF上看到Um_nik和dls在讨论ICPC,当时听说国际比赛不敢出数据结构大题,甚至连码量大的题,或者计算机理论要求比较高的题都不敢出,因为不清楚哪些国家在某些套路上有什么偏好,做APIO的时候感觉无比真实。。。但是这道题正解是不是太明显了一点,China肯定一堆人切了吧可惜我没去APIO不然就200+了题解:第一感觉是线段树分治...原创 2019-10-28 14:46:47 · 785 阅读 · 0 评论 -
2019.01.20【校内模拟】Thunder(Kruskal)(带权并查集)
传送门解析:水题啊,带全并查集维护一下当前连通块内有没有两种点就行了。然后Kruskal的思想,对边排序,倒序搞就行了。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#define re register#define gc get_char#define pc putchar...原创 2019-01-20 15:06:27 · 257 阅读 · 0 评论 -
【LOJ121】「离线可过」动态图连通性(线段树分治)(并查集)
传送门题解:每条边的出现是在一定时间范围内的。于是我们考虑以时间为下标建立线段树,同时维护可回退化并查集就行了。所谓的可回退化,也可以理解为可以还原到原来的某个版本,我们不使用路径压缩,而是按照sizsizsiz合并,并且用一个栈来保存所有对并查集的修改操作。然后需要的时候直接回退到历史版本就行了。代码:#include<bits/stdc++.h>#define ...原创 2019-06-19 14:41:34 · 411 阅读 · 0 评论 -
【8.22测试爆零记】
T1:wykres线段树分治+可回退化并查集。需要比较精细的实现,不然会被卡常。下面给出一个在时限的1/5内通过所有点的代码。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ inlin...原创 2019-08-23 19:57:33 · 212 阅读 · 0 评论 -
【洛谷P3940】分组(并查集)(暴力)
传送门题解:首先发现数据限制了只有k=1k=1k=1和k=2k=2k=2的情况,而且值域不是很大,或许可以暴力枚举平方根。考虑k=1k=1k=1的情况,显然直接枚举平方根,把不能同组出现的数标记一下就行了。注意我们需要最小化分界的字典序,所以实际上是将后缀划分得尽量长而已,倒着枚举即可。考虑k=2k=2k=2的情况,仍然考虑枚举平方根,仍然考虑倒序枚举。现在问题成了怎么验证。首先有一...原创 2019-09-09 21:32:14 · 133 阅读 · 0 评论 -
【AGC016D】XOR Replace(推结论)(并查集)
传送门题解:首先注意到换下来一个数之后,下一次的异或和就是这次换下来的数。假设在000号位置上有一个数是整个数列的xor和,则两个数列必须能够在重排之后完全相同才能有解。注意到实际上我们每次是把0号位置和某一个位置上的数交换。先把权值离散化一下。每次我们可以把一个a[0]a[0]a[0]上的数放到它该去的地方。每个数向它该去的地方连边,对于每个连通块,显然是一个环,如果环中间包含0...原创 2019-09-10 20:57:23 · 206 阅读 · 0 评论 -
【CF896E】Welcome home, Chtholly(分块)(并查集)
传送门题解:分块。由于值域很小,考虑用并查集维护块内相同的数个数以及当前的值,整块修改的时候只需要看一下当前块的值域RRR是否大于两倍当前的修改参数vvv,如果R≥v∗2R\geq v*2R≥v∗2,则我们将[1,v][1,v][1,v]的并查集向上合并并打标记,否则我们将上面的向下合并,于是我们可以在O(a)O(a)O(a)的时间内将值域大小减少aaa,均摊复杂度是对的。操作常数,整块...原创 2019-09-27 18:52:31 · 322 阅读 · 0 评论 -
2018.10.23【校内模拟】战争(并查集)
传送门解析:首先,顺序删边维护连通性其实就是倒着把所有点加回去就行了。同时并查集维护一下当前连通块权值之和。每次合并得到的新增的贡献就是两个连通块权值的乘积。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#define re register#define gc getchar...原创 2018-10-23 18:05:59 · 133 阅读 · 0 评论 -
2018.09.22【JSOI2008】【BZOJ1016】最小生成树计数(矩阵树定理)(并查集)
传送门解析:好的这是一道需要数学推理的矩阵树题目。是的,我们还会用到并查集,就像KruskalKruskalKruskal一样。首先我们考虑一个问题。前置定理我们先随便做一棵最小生成树。重要定理:那么在这棵生成树中如果权值为www的边有ttt条,那么在所有最小生成树中,权值为www的边都有kkk条。证明如下:考虑在这棵生成树中断掉一条权值为www的边,使其分为两个联通分量。再次...原创 2018-09-22 16:10:51 · 265 阅读 · 2 评论 -
2018.09.11【BZOJ1370】团伙(并查集)
传送门解析:好裸的并查集。。。首先如果我们已经得到每个人属于的团伙编号,就只需要查有几个根节点,也就是fax==xfax==xfa_x==x的点。那么怎么合并? 朋友关系直接合并。遇到敌人关系的时候,如果对方已经有记录的敌人了,就将自己和对方记录的敌人合并,不然就将自己标记为对方的敌人,因为我敌人的敌人是我的朋友,属于同一个团伙。代码:#include&l...原创 2018-09-11 20:23:05 · 166 阅读 · 0 评论 -
2018.09.14【BZOJ4596】【SCOI2016】萌萌哒(并查集)
传送门解析:显然当我们统计出有多少个真正意义上互相独立的数位之后,这道题就只剩下一个快速幂的事情。那么考虑怎么统计。显然不可能是对于所有节点O(n)O(n)O(n)扫一遍建立并查集。既然是区间。。。区间。。。而且只有单纯的合并操作。分层并查集!令fa[i][c]fa[i][c]fa[i][c]表示iii在第ccc层里面的所属集合的根节点。 也就是保存以ii...原创 2018-09-14 23:45:32 · 110 阅读 · 0 评论 -
2018.09.14【BZOJ1050】【HAOI2006】旅行comf(并查集)
传送门解析:由于这道题数据规模很小,我们考虑一个看起来不太优秀的算法。枚举最小边,不断加入大边,直到s,ts,ts,t联通。 当然,最开始边输入的时候就判断一下s,ts,ts,t能否到达。就直接并查集维护一下就好了。代码:#include<bits/stdc++.h>using namespace std;#define ll long lon...原创 2018-09-15 00:31:14 · 155 阅读 · 0 评论 -
2018.09.15【codevs2492】上帝造题的七分钟2(并查集)(树状数组)(线段树)
传送门解析:这里的并查集并不能用集合合并的思想来考虑,这里并查集有点像图论中的DAGDAGDAG里的边,记录的是当前节点的下一个(包括当前)非1节点的位置。显然,对1开方对答案是没有任何影响的。那么我们就只对非1的开方。那么我们就只遍历非1的节点。修改和查询用树状数组就好了。一个数最多被开方log log arrilog log...原创 2018-09-15 14:36:57 · 239 阅读 · 0 评论 -
2018.09.15【HDU2437】Junk-Mail Filter (并查集)
传送门解析:用一个pospospos数组表示当前节点在并查集中的对应节点编号。删除的时候直接更改节点pospospos值就行了。还有。 为什么rankrankrank是关键字啊!!! 为什么HDUHDUHDU下标强制从0开始啊???代码:#include<bits/stdc++.h>using namespace std;#define ll...原创 2018-09-15 15:15:44 · 141 阅读 · 0 评论 -
2018.09.15【NOI2001】【洛谷P2024】食物链(并查集)(拆点)
传送门解析:没做过这道题的小伙伴可以去看一看。那道题我偷懒记录了一下每个人的敌人(因为敌人的敌人是朋友是一个自反关系)。这道题既不是自反关系也不是偏序关系,所以我们考虑拆点。对一个点xxx,我们分为三个点x,x+n,x+n∗2x,x+n,x+n∗2x,x+n,x+n*2,对于任意的点aaa,a−na−na-n是它的天敌,a+na+na+n是的猎物。则每次合并操作我们...原创 2018-09-15 16:01:19 · 192 阅读 · 0 评论 -
2018.09.26【洛谷P3359】改造异或树(并查集)(启发式合并)
传送门解析:话说STLSTLSTL不开O2O2O2真的慢啊。。。开了O2O2O2跑得飞快。。。思路:首先是一个做多了题就懂的套路。要求一条一条地删边,我们就直接倒序加边。。。维护连通性是显然的并查集啊。话说异或为0怎么处理?这是一棵树啊。。。异或是自反的啊。。。那树上差分不就好了。。。随便选一个根。直接一趟dfsdfsdfs处理出所有点到根节点的异或距离。然后我们就知...原创 2018-09-26 20:26:55 · 194 阅读 · 0 评论 -
2018.09.27【NOI2002】【洛谷P1196】银河英雄传说(带权并查集)
传送门解析:带权并查集裸题啊。我们用一个lastlastlast记录根到最远的节点的距离,合并一下就好了。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#define re register#define gc getchar#define pc putchar#define...原创 2018-09-27 16:27:24 · 171 阅读 · 0 评论