并查集
SC.ldxcaicai
我很菜=_=
展开
-
2018.06.29 NOIP模拟 Minimum(最小生成树)
Minimum 题目背景 SOURCE:NOIP2015-SHY-2 题目描述 给出一幅由 n 个点 m 条边构成的无向带权图。 其中有些点是黑点,另外点是白点。 现在每个白点都要与他距离最近的所有黑点通过最短路连接(如果有很多个,可以选取其中任意一个),我们想要使得花费的代价最小。请问这个最小代价是多少? 注意:最后选出的边保证每个白点到黑点的距离任然是最短距离。 输入格式 第...原创 2018-10-11 23:06:36 · 260 阅读 · 0 评论 -
zoj3583 Simple Path(并查集+枚举)
传送门题意简述:给出一张图问不在从sss到ttt所有简单路径上的点数。思路:枚举删去每个点然后把整张图用并查集处理一下,同时不跟sss和ttt在同一个连通块的点就是满足要求的点(被删去的不算)。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;inline int read(){...原创 2019-01-22 18:51:03 · 198 阅读 · 0 评论 -
uoj#14. 【UER #1】DZY Loves Graph(并查集)
传送门题意简述:要求支持以下操作:在a与b之间连一条长度为i的边(i是操作编号);删除当前图中边权最大的k条边;表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作。要求在每次操作后输出当前图的最小生成树边权和。思路:由于边权为当前操作编号因此相当于边是单调加入的,也就是说我们可以直接上kruskalkruskalkruskal的合并方法。关键在于怎么维护这几个操作。加边...原创 2019-01-22 00:36:13 · 234 阅读 · 0 评论 -
bzoj3674: 可持久化并查集加强版(主席树+并查集)
传送门题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性。思路:我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩。可以考虑另外一种优化方式:按秩合并貌似直接瞎合并也能过于是主席树再额外维护一个该节点的秩即可。代码:#include<bits/stdc++.h>#define ri register int...原创 2019-01-21 21:44:23 · 296 阅读 · 0 评论 -
NOIP模拟 迅雷(kruskal/二分+并查集)
传送门题意简述:给一张带权无向图,有a,ba,ba,b两类特殊点和普通点,问使得至少有一个aaa和一个bbb连通所需要的所有边边权最小值的最大值是多少。思路:一眼发现可以二分,考虑怎么checkcheckcheck显然直接把所有大于二分值的并起来看满不满足要求。正准备写的时候想了一个更简单的,把边排个序然后从大到小加进去直到满足题意时就是答案。代码...原创 2019-01-20 14:40:48 · 194 阅读 · 0 评论 -
2018.11.02 NOIP模拟 飞越行星带(最小生成树/二分+并查集)
传送门发现题目要求的就是从下到上的瓶颈路。画个图出来发现跟去年noipnoipnoip提高组的奶酪差不多。于是可以二分宽度+并查集检验,或者直接求瓶颈。代码...原创 2018-11-02 16:44:00 · 155 阅读 · 0 评论 -
2018.11.04 NOIP训练 小水塘(并查集)
传送门这是复习普及组的时候做过的题了。之前一直觉得很难码没有去做。现在发现可以用并查集直接水过去。其实就是把题目中说的连通的部分的面积用带权并查集维护一下就行了。代码:#include<bits/stdc++.h>using namespace std;inline int read(){ int ans=0; char ch=getchar(); while(!...原创 2018-11-04 15:43:20 · 128 阅读 · 0 评论 -
2018.10.23 NOIP模拟 战争(并查集)
传送门跟bzoj1015: [JSOI2008]星球大战是同一道题啊讲道理。随便合并一下就能过了。代码原创 2018-10-23 16:39:13 · 238 阅读 · 0 评论 -
2018.10.16 NOIP模拟 华莱士(并查集)
传送门按照题意模拟维护最小的环套树森林就行了。然而考试的时候naivenaivenaive瞎写了一个错误的贪心。代码原创 2018-10-16 14:21:03 · 235 阅读 · 0 评论 -
2018.09.26 bzoj1015: [JSOI2008]星球大战starwar(并查集)
传送门并查集经典题目。传统题都是把删边变成倒着加边,这道题是需要倒着加点。处理方法是将每个点与其他点的边用一个vector存起来,加点时用并查集统计答案就行了。代码:#include<bits/stdc++.h>#define N 400005#define M 200005using namespace std;inline int read(){ int ans...原创 2018-09-26 12:00:32 · 163 阅读 · 0 评论 -
2018.10.01 bzoj3237: [Ahoi2013]连通图(cdq分治+并查集)
传送门cdq分治好题。对于一条边,如果加上它刚好连通的话,那么删掉它会有两个大集合A,B。于是我们先将B中禁用的边连上,把A中禁用的边禁用,再递归处理A;然后把A中禁用的边连上,把B中禁用的边禁用。这样递归下去用并查集维护答案就行了。另外,当向上回溯时需要撤销之前的操作,因此需要用栈维护并查集历史信息。代码:#include<bits/stdc++.h>#define ...原创 2018-10-01 18:48:04 · 179 阅读 · 0 评论 -
2018.09.30 bzoj4025: 二分图(线段树分治+并查集)
传送门线段树分治好题。这道题实际上有很多不同的做法:cdq分治。lct。…而我学习了dzyo的线段树分治+并查集写法。所谓线段树分治就是先把操作分成lognlognlogn个连续不相交的区间分别维护信息。最后按线段树从上到下再从左到右的遍历方式一起统计答案。这道题可以按时间建树,每次相当于在一段区间里增加边。最后统计二分图就行了,这个问题可以用并查集解决。然而我们回溯上去的...原创 2018-09-30 21:42:49 · 375 阅读 · 0 评论 -
2018.09.25 codeforces1053E. Euler tour(并查集+st表+模拟)
传送门毒瘤模拟。首先考虑不合法的情况。先把相同的值配对,这样就构成了一些区间。那么如果这些区间有相交的话,就不合法了。如何判断?DZYO安利了一波st表,我觉得很不错。接着考虑两个相同的值,它们中间一定只有奇数个数。然后剩下不合法的情况可以在接下来处理时判断。接下来还原序列的问题是可以拆分成子问题的。考虑这两个相同的值夹住的区间。显然这个区间里是没有值相同的。对于区间里两个相...原创 2018-09-25 15:01:55 · 655 阅读 · 0 评论 -
2018.09.24 bzoj1016: [JSOI2008]最小生成树计数(并查集+搜索)
传送门正解是并查集+矩阵树定理。但由于数据范围小搜索也可以过。我们需要知道最小生成树的两个性质:不同的最小生成树中,每种权值的边出现的个数是确定的不同的生成树中,某一种权值的边连接完成后,形成的连通块状态是一样的那么可以根据乘法原理按权值分步,将每一步得到的结果相乘。每次分步的计算可以用搜索/矩阵树定理来实现。代码:#include<bits/stdc++.h>...原创 2018-09-24 23:40:11 · 141 阅读 · 0 评论 -
2018.09.12 hdu2473Junk-Mail Filter(并查集)
传送门 一开始开题还以为是平衡树。 仔细想了一想并查集就可以了。 合并操作没什么好说的。 删除操作:对于每个点记录一个pos值表示原来的点i现在的下标是什么。 每次删除点i是就新建一个点cnt,然后令pos[i]=cnt就行了。 代码;#include<bits/stdc++.h>#define N 1200005using namespace std;inl...原创 2018-09-13 21:51:55 · 123 阅读 · 0 评论 -
2018.08.21 bzoj4668: 冷战(并查集+启发式合并)
传送门 可以发现需要维护连通性和两点连通时间。 前者显然是并查集的常规操作,关键就在于如何维护两点的连通时间。 然后会想到这个时候不能用路径压缩了,因为它会破坏原本树形集合的结构,因此可以启发式按size合并。 代码:#include<bits/stdc++.h>#define N 500005using namespace std;int n,m,fa[N],l...原创 2018-08-21 22:05:36 · 453 阅读 · 0 评论 -
2018.08.02 hdu1558 Segment set(并查集+计算几何)
传送门 这个直接用并查集维护。 每加入一条线段就将它与其他能相交的集合合并,维护一个sizesizesize域表示每个集合的大小。 代码:#include&lt;bits/stdc++.h&gt;#define eps 1e-15using namespace std;int t,fa[1005],n,siz[1005],cnt;struct pot{double x,y;}...原创 2018-08-02 11:52:03 · 182 阅读 · 0 评论 -
2018.07.31 bzoj4569: [Scoi2016]萌萌哒(并查集+倍增)
传送门 对于每个限制,使用倍增的二进制拆分思想,用并查集数组fa[i][j]fa[i][j]fa[i][j]表示从iii开始,延伸2j2j2^j的区间所属的集合,这样的话,我们将所有限制拆分过后,从上向下传递标记直到长度为111的区间,最后统计有多少长度为111的区间的祖先是自己即可。 代码:#include&lt;bits/stdc++.h&gt;#define mod 10000...原创 2018-07-31 11:51:51 · 240 阅读 · 0 评论 -
bzoj2959: 长跑(lct+并查集)
传送门思路:题目中的有向边并没有什么用。。。直接维护整张图的双联通分量的信息即可。用lctlctlct和两个并查集分别维护点和双联通块的信息。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;const int rlen=1<<18|1;inline char gc()...原创 2019-06-26 17:10:33 · 147 阅读 · 0 评论