高级数据结构
并查集
基本
- 合并两个集合
- 查询某个元素的祖宗节点
优化
路径压缩 O(nlogn)
按秩合并 O(nlogn)
O(α(n)) ≈ O(1), 当n ≤ 161987 , α(n) ≤ 5
维护
- 记录每个集合大小 → 绑定到根节点
- 每个点到根节点距离 → 绑定到每个元素
食物链(多个类的集合)
带权并查集 相对的思想 d[x] 每个点到根节点距离,表示元素与根节点关系
拓展域并查集 k位 O(k) 枚举的思想
形成环
两个点在连边之前在一个集合中
二维 → 一维
(x,y) → x*n+y (x,y 都从0开始)
题目
AcWing1252.搭配购买
01背包 钱为容量 每个连通块为一个物品
总体积 总价值 → 绑定到根节点
p[x] == x
程序自动
题目分析
约束条件顺序无所谓
先考虑所有“相等”约束(不可能有矛盾)
再考虑不等条件
xi ≠ xj 矛盾:xi 与 xj 已在同一集合中
思路
- 离散化 109 → 2*106
- 保序: 排序 判重 二分
- 不保序: map / Hash表
- 将所有相等条件合并 → merge
- 依次判断每个不等条件 → 并查集查询 xi yi
并查集(只向图) ∈ 传递背包 O(n3) 有/无向图都可
1.25小结
组队练习:CCPC2018吉林(VJ重现)
E - The Tower √
+B题调试
+全部翻译