随笔分类 - 数据结构——并查集/可撤销并查集
摘要:II.[APIO2013]道路费用 这个,明显就很可以枚举掉有哪些边出现在MST上。但是,如何设置权值使得要求出现的边全数出现呢? 我们考虑裸的Kruskal算法。首先,先用冰茶姬将要求出现的边加入生成树(明显此时如果已经出现了环,则此边集本身即不合法,可以直接跳过该边集),然后将原
阅读全文
摘要:XXX.[HDU3151]Cave Crisis 一眼看上去跟XII.[ABC181F]Silver Woods完全一致,因此考虑一样的思路。 于是我们现在问题变为求出两个多边形间的距离。 首先先考虑如何判断它们是否有交。有交只有一种可能,就是边有交。于是我们枚举两个多边形所有的边,然后判断它们是否
阅读全文
摘要:XII.[ABC181F]Silver Woods 一种很蠢的思路是把平面三角剖分然后建图,然后二分,但这很明显是个很蠢的主意 我们考虑反向思考——对于所有的有序点集,球的直径一定$\leq\min\Big{dis(y=100,p_1),dis(p_1,p_2),\do
阅读全文
摘要:XLVI.CF1408G Clusterization Counting 很明显,将边按照权值从小到大排序后,依次用冰茶姬合并,如果任意时刻出现了团,则这个团显然是唯一合法的可能。人脑思考可得这个团之间的关系肯定是个划分树关系(即一个大团裂成许多小团的树形关系),因此总合法团数是
阅读全文
摘要:XXIX.CF576E Painting Edges 首先,这个trick很常见,应该默认就能想到线段树分治的做法。但是,同样可以实现该trick的LCT维护关于删除时间的最大生成树的做法,因为我们并不知道删除时间是什么,所以不太好写(但是是能写的)。故我们只考虑线段树分治做法。 线段树分治,只需要
阅读全文
摘要:XV.CF319E Ping-Pong 好题。 首先,离线下来离散化显然是不用说的。 然后观察这里“可以移动”的定义,发现明显可以类比图论中的连边。发现边只有有向边(两区间包含)和无向边(两区间相交)两种,又因为我们只管连通性,所以无向边可以直接使用并查集维护。而包含关系又具有可传递性,故我们最终会
阅读全文
摘要:IX.[BZOJ4998]星球联盟 这题就比较套路了(虽然我的程序还好好让我debug了一会),比上一题还要简单,直接暴力维护点双即可。 代码: #include<bits/stdc++.h> using namespace std; #define lson t[x].ch[0] #define
阅读全文
摘要:VIII.[BZOJ2959]长跑 我想把出这么毒瘤的题的人拖出来揍一顿 这题稍微想想,就是动态维护点双连通分量并缩点,然后在缩出来的树上求两点距离。 思想简单但代码极其复杂。 首先,我们可以使用冰茶姬维护点双,所有的点全都并到一个冰茶姬中,除了冰茶姬的象征节点,其它的点一律全都删去,不保留任何信息
阅读全文
摘要:VII. "CF954I Yet Another String Matching Problem" ~~FFT做字符串匹配就是有意思~~ 我们首先必须要搞清楚暴力匹配是什么样的过程。 例: | 位置 | 0 | 1 | 2 | 3 | | : : | : : | : : | : : | : : |
阅读全文