所谓并查集就是将编号为1~n的n个对象划分为不相交集合,在每个集合中,选择其中的某个元素代表所在集合在这个集合中,并查集的操作有初始化,合并,查找。 #include<bits/stdc++.h> using namespace std; #define IOS ios::sync_with_std ...
分类:
其他好文 时间:
2021-04-20 15:31:02
阅读次数:
0
// 并查集模板,包含路径压缩(参考 findset 函数)以及按秩合并(参考 sz 变量) class UF { public: vector<int> fa; vector<int> sz; int n; int comp_cnt; public: UF(int _n): n(_n), comp ...
分类:
其他好文 时间:
2020-12-25 12:01:55
阅读次数:
0
常规并查集 模板 #define Maxsize 100+1 int f[Maxsize]; void init(int n){ for(int i = 1; i <= n; i++) f[i] = i; } int find_f(int a){ if(f[a] == a){ return a; } ...
分类:
其他好文 时间:
2020-07-16 11:58:56
阅读次数:
105
这个月每日一题有很多没做的,主要重心放在并查集和二分查找的题。 ...
分类:
其他好文 时间:
2020-06-29 16:57:53
阅读次数:
49
1 并查集 (不封装,按秩合并) int ancestor(int x) {return p[x] == x ? x : (p[x] = ancestor(p[x]));} bool test(int x, int y, bool un = false) { if ((x = ancestor(x) ...
分类:
其他好文 时间:
2020-04-09 12:35:57
阅读次数:
59
最小生成树两连 并查集优化的克鲁斯卡尔算法和优先队列+链式前向星优化的普利姆算法 Kruskal Kruskal是常用的最小生成树算法,算法利用贪心思想,每次选择没用过且不构成环的边的最小边,直到选择了n 1条边,通常我们用并查集这个数据结构去优化,优化后的Kruskal算法复杂度是$O(mlogm ...
分类:
其他好文 时间:
2020-04-07 12:27:31
阅读次数:
86
一翻题解, 都是建虚点的离线做法, 这里提供一个更好想也更好写的在线做法(雾 ...
分类:
其他好文 时间:
2020-03-23 00:22:49
阅读次数:
131
A 略 B 略 C 有解当且仅当存在 $a_i + a_j \geq L$ D $\triangle$ 考虑一个暴力:整体二分,每次遍历整张图 由于每次访问的点的数量跟二分的mid有关,直接t飞 可以发现上面这个算法并没有很好地重复利用之前的信息 考虑把信息用并查集维护,然后把 $1 \sim m$ ...
分类:
其他好文 时间:
2020-03-12 09:54:36
阅读次数:
92
线段树分治 离线分治来解决一类问题,如 "二分图" 二分图显然可以用 扩展域的并查集 来实现,如果在线直接扫一遍的话, 发现边消失时撤销的操作并不是很好做(~~LCT大法吼啊~~),但如果撤销上一步操作就不是很难了, 只需要按秩合并,再搞一个栈来维护操作就行了 线段树分治 就不知道高明到哪里去了, ...
分类:
其他好文 时间:
2020-02-07 01:21:06
阅读次数:
65
合并不采用路径压缩,保证每次合并只修改一个节点的父亲,使当前版本与上一版本共用的节点尽可能的多 为防止并查集退化成链,采取按秩合并 $code$: ...
分类:
其他好文 时间:
2020-01-22 22:06:15
阅读次数:
80