
【数据结构】并查集
文章平均质量分 81
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【CodeForces】Educational Codeforces Round 37 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】Water The Garden【思路要点】按照题意模拟,或者简单计算一下均可。时间复杂度\(O(N)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 5005;template <typename T> void read(T &...原创 2018-02-12 21:08:20 · 470 阅读 · 0 评论 -
【CodeChef】October Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接**【BBRICKS】**Beautiful Bricks【思路要点】上下两个砖块中,至多有一个黑色。连续的一段存在黑色的行共有两种放置的方案。枚举有几段连续的存在黑色的行,用组合数计算答案。单组数据时间复杂度 O(K)O(K)O(K) 。【代码】#include&amp;lt;bits/stdc++.h&amp;gt;using namespace ...原创 2018-10-21 10:46:08 · 535 阅读 · 0 评论 -
【省内训练2018-11-23】Graph
【思路要点】离线询问,为每一条边找到一个删除时间。将过程倒过来,按照删除时间倒序加入每一条边。我们将加入的边分为两类,加入后连接两个不同的联通块的称为树边,剩余的边称为非树边。显然,树边的加入不会产生新的双连通分量,因此,我们可以预先将所有的树边加入图中,并处理出形成的森林中每个节点的深度等信息。之后,我们每加入一条非树边,就会将森林中一条树链上所有的节点合并起来,可以通过并查集实现...原创 2018-11-24 16:58:31 · 299 阅读 · 0 评论 -
【校内训练2019-01-15】鸡
【思路要点】考虑快速模拟 KruskalKruskalKruskal 算法。具体来说,对于所有长度为 iii 的边,我们需要计算有多少条连接了两个由长度不足 iii 的边连成的不同联通块,并不会与其余长度为 iii 的边连接的联通块成环,记条数为 cnticnt_icnti ,则 Ans=∑i=0Mi∗cntiAns=\sum_{i=0}^{M}i*cnt_iAns=∑i=0Mi∗cn...原创 2019-01-15 18:04:26 · 320 阅读 · 0 评论 -
【USACO】USACO 2019 US Open Contest, Platinum题解
【T1】 Tree Boxes【题目链接】点击打开链接【题解链接】点击打开链接【思路要点】考虑在 N×NN\times NN×N 的网格内构建一个 NNN 个点的树,使得任意一个节点 xxx 与其任意一个祖先 yyy 所在位置为两角的矩形恰好包含 xxx 到 yyy 路径上的所有点。以如下方式构造即可:(1)(1)(1) 、将根节点置于 (1,1)(1,1)(1...原创 2019-04-14 14:37:25 · 1628 阅读 · 0 评论 -
【省内训练2019-06-01】碰壁
【思路要点】将所有坐标乘以 222 ,对于原坐标系中的每一条长度为 111 的线段,用其新坐标的中点来描述。将所有边界拆分为若干长度为 111 的线段,预处理各个线段在四个方向上的后继线段。用路径压缩的模拟求答案即可。时间复杂度 O(NLogN)O(NLogN)O(NLogN) ,此处认为 N,M,KN,M,KN,M,K 同阶。【代码】#include<bits/std...原创 2019-06-05 12:48:36 · 285 阅读 · 0 评论 -
【省内训练2019-06-06】正方形
【思路要点】求出各个点为右下角的矩形的最大值。将询问离线并排序,按照 www 从大到小处理,用并查集支持查询即可。时间复杂度 O(NMα+Q)O(NM\alpha+Q)O(NMα+Q) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 1e3 + 5;const int MAXM ...原创 2019-06-10 16:54:04 · 209 阅读 · 0 评论 -
【LOJ2322】「清华集训 2017」Hello world!
【题目链接】点击打开链接【思路要点】一个 101310^{13}1013 以内的数开根 666 次后一定会变成 111 ,因此有效的修改次数不会超过 6N6N6N 。设定一个阈值 α\alphaα ,若 k≥αk≥\alphak≥α ,则暴力进行询问或修改,借助长链剖分求 kkk 级祖先,单次操作时间复杂度为 O(Nα)O(\frac{N}{\alpha})O(αN) 。考...原创 2018-09-28 11:19:32 · 660 阅读 · 0 评论 -
【CodeForces】CodeForces Round #507 (Div. 1) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Timetable 【思路要点】 首先,若存在任何一组合法解,有 bi≥ai+t&amp;amp;amp;nbsp;(1≤i≤N)bi≥ai+t&amp;amp;amp;nbsp;(1≤i≤N)b_i≥a_i+t\ (1≤i≤N) 。 对于每一个 xixix_i ,应当满足 xi≥i,&原创 2018-09-10 20:47:42 · 515 阅读 · 0 评论 -
【BZOJ3038】上帝造题的七分钟2
【题目链接】 点击打开链接 【思路要点】 补档博客,无题解。 【代码】 #include<bits/stdc++.h>using namespace std;#define MAXN 100005template <typename T> void read(T &x) { x = 0; i...原创 2018-09-05 16:25:50 · 247 阅读 · 0 评论 -
【BZOJ2733】【HNOI2012】永无乡
【题目链接】点击打开链接【思路要点】线段树合并裸题。时间复杂度\(O(NLogN+QLogN)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 200005;const int MAXP = 10000005;template <typename T> void chkmax(T &...原创 2018-03-15 17:34:19 · 279 阅读 · 0 评论 -
【BZOJ5101】【POI2018】Powód
【题目链接】点击打开链接【思路要点】从低到高加入每一块挡板,没有加入的挡板视为高度为\(H\)。初始时,每一个单位正方形自成一个联通块,方案数为1,水位高度为0。加入一块挡板前,将每个联通块的方案数加上挡板高度减去当前水位。加入一块挡板相当于合并两个联通块,方案数为两个联通块方案数的乘积。于是,我们需要维护一个数据结构支持合并和全局加法,用并查集和一个全局加法TAG维护即可。时间复杂度\(O(N*...原创 2018-03-19 13:59:39 · 275 阅读 · 0 评论 -
【BZOJ4537】【HNOI2016】最小公倍数
【题目链接】点击打开链接【思路要点】首先对所有边按照\(A\)值排序,并分块。对于每个块,我们处理\(A\)值在该块内的询问。假设我们正在处理第\(i\)块,那么我们将第1到\(i-1\)块的边取出,并按\(B\)排序,然后按\(B\)从小到大的顺序处理本块内需要处理的询问。当处理一个询问时,先加入\(B\)值比它小的边,用并查集维护联通性与联通块内\(A\)和\(B\)的最大值。然后我们可能要额...原创 2018-03-20 15:42:01 · 353 阅读 · 0 评论 -
【BZOJ4195】【UOJ127】【NOI2015】程序自动分析
【题目链接】BZOJUOJ【思路要点】离散化变量名,用并查集将相等的变量并在一起。若有不等的变量被并在了一起,答案为NO,否则答案为YES。时间复杂度\(O(TNLogN)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 200005;template <typename T> voi...原创 2018-05-25 20:40:05 · 260 阅读 · 0 评论 -
【BZOJ4569】【SCOI2016】萌萌哒
【题目链接】 点击打开链接 【思路要点】 很强的脑洞题。 显然有一个O(NM)O(NM)O(NM)的暴力,每次暴力用并查集合并区间的对应位置。 考虑加速这个过程,我们新建O(LogN)O(LogN)O(LogN)层点,第iii层的两个点pi,xpi,xp_{i,x}和pi,ypi,yp_{i,y}被用并查集合并,表示xxx起的2i2i2^i个元素和yy...原创 2018-07-06 19:19:34 · 397 阅读 · 0 评论 -
【CodeForces】CodeForces Round #400 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**A Serial Killer【思路要点】 维护两个字符串模拟。 时间复杂度O(N)O(N)O(N)。 【代码】 #include&lt;bits/stdc++.h&gt;using namespace std;const int M...原创 2018-08-02 18:22:36 · 360 阅读 · 0 评论 -
【CodeForces】CodeForces Round #504 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Single Wildcard Pattern Matching 【思路要点】 判断 SSS 的星号前后是否为 TTT 中不相交的前缀和后缀。 时间复杂度 O(N+M)O(N+M) O(N+M) 。 【代码】 #include&amp;amp;lt;bi...原创 2018-09-07 21:34:59 · 344 阅读 · 0 评论 -
【CodeForces】Manthan, Codefest 18 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Packets 【思路要点】 可以用 1,2,4,...,2i,N−2i+1+11,2,4,...,2i,N−2i+1+11,2,4,...,2^i,N-2^{i+1}+1 构造一组最优的可行方案。 其中 iii 为使得 N−2i+1+1&amp;gt;0N−2i+1...原创 2018-09-05 11:34:15 · 397 阅读 · 0 评论 -
【CodeForces875F】Royal Questions
题目链接点击打开链接题目解法由于一个王子至多匹配一个公主,因此将王子按照价值排序,贪心地考虑能否加入答案是正确的。将王子的选择看做一条边,那么由 HallHallHall 定理,存在完美匹配的充要条件是每一个联通块是树或环套树。用并查集解决即可。时间复杂度 O(N+MLogM)O(N+MLogM)O(N+MLogM) 。【代码】#include<bits/stdc++.h&g...原创 2019-08-28 13:53:34 · 271 阅读 · 0 评论