
并查集
LowestJN
强省弱OIer
展开
-
[最小生成树 并查集] Codechef October Challenge 2017 .Lucky Edge
O(n)O(n) 枚举左端点,然后往右做一棵以编号为权值的最小生成树,每一条非树边覆盖的树边的编号一定小于它。那么再从左往右扫每条非树边,会对它覆盖的树边加上 n−i+1n-i+1 的贡献,但是树边只能被加一次所以可以用并查集把加过的树边的两个端点缩起来。这样也就不需要求LCA了O(n2α)O(n^2\alpha)然后卡卡常就好了…#include <cstdio> #include <iostre原创 2017-10-17 07:54:34 · 510 阅读 · 0 评论 -
[双联通分量 并查集] CEOI 2017. One-Way Streets
很显然如果一条边在双联通分量中,那么它两个方向都是可以的。否则的话,因为保证输入合法,那么就可以从两个点往 lca\text{lca} 扫没有扫过的边,把边定向。这个东西可以用并查集维护总复杂度就 O(n log n)\text{O(n log n)} #include <cstdio> #include <iostream> #include <algorithm> #include <asser原创 2017-10-06 18:19:58 · 1045 阅读 · 0 评论 -
[并查集] UOJ#61. UR#5 怎样更有力气
这题调的我心态爆炸大概就是可以把这条链分成若干联通块,联通块之间能连边就直接连因为每条边只会被缩一次,所以复杂度是有保证的#include <cstdio> #include <iostream> #include <algorithm> #include <map> #include <set>using namespace std;typedef long long ll;const int N原创 2017-10-26 11:40:10 · 622 阅读 · 0 评论 -
[整体二分 并查集]Atcoder AGC002 D. Stamp Rally
每个询问就是求最小的 xx,使得保留编号小于等于 xx 的边后,和 ai,bia_i,b_i 相连的点大于等于 ziz_i这个东西整体二分一下,用按秩合并的并查集维护一下就好了吧#include <cstdio> #include <iostream> #include <algorithm> #define fi first #define se secondusing namespace std原创 2017-12-06 20:48:09 · 531 阅读 · 0 评论 -
[树的直径] Codechef March Cook-Off 2018. Maximum Tree Path
这个套路好像是计蒜之道里的一题 考虑枚举gcd 把两端点都是gcd的倍数的边存下来,按照两段点较小值从大到小排序 枚举每一条边,把这条边加入图中,可以用并查集维护出所有联通块的直径,然后就好了 #include <cstdio> #include <iostream> #include <algorithm> #include <vector&...原创 2018-03-23 21:14:30 · 443 阅读 · 0 评论