高级数据结构—并查集

高级数据结构

图1

并查集

基本
  • 合并两个集合
  • 查询某个元素的祖宗节点
优化

路径压缩 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 已在同一集合中

思路
  1. 离散化 109 → 2*106
  • 保序: 排序 判重 二分
  • 不保序: map / Hash表
  1. 将所有相等条件合并 → merge
  2. 依次判断每个不等条件 → 并查集查询 xi yi

并查集(只向图) ∈ 传递背包 O(n3) 有/无向图都可


1.25小结

组队练习:CCPC2018吉林(VJ重现)
图2-图3
E - The Tower √
+B题调试
+全部翻译

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值