当前位置: 首页 > news >正文

扩展域并查集理解性总结

纯文字内容,较短,较枯燥,但感谢你能点进来并完成阅读。

前置:并查集

扩展域并查集(种类并查集)

理解思想

一.团伙

  • 给定若干满足如下两条的关系,求会构成多少个团伙:
    • \(x\)\(y\) 为朋友
    • \(x\)\(y\) 为敌人

  • 普通并查集维护朋友关系依靠的是朋友关系具有传递性,即朋友的朋友还是朋友。但是,敌人的敌人是朋友并不满足上述传递性,因此需要想办法将问题转化为满足传递性。这就是扩展域并查集维护的问题方法。

  • 每个人存在两种关系,将两种关系分为两个集合:
    • 朋友集(\(x\))
    • 敌人集(\(x+n\))

  • 对于每种关系:
    • 如果 \(x\)\(y\) 是朋友,就\(y\) 加入 \(x\) 的朋友集,即操作:
      //将y加入x的朋友集(x)
      add(x,y);
      
    • 如果 \(x\)\(y\) 是敌人,就\(y\) 加入 \(x\) 的敌人集,将 \(x\) 加入 \(y\) 的敌人集,即操作:
      //分别将x,y加入对方的敌人集
      add(x+n,y);//x的敌人集(x+n)
      add(y+n,x);//y的敌人集(y+n)
      

  • 这样实际上利用了:
    敌人的敌人就是朋友这一性质,将无法维护(无法合并)的敌对关系 \(x\)\(y\) ,换成了敌人与敌人间的朋友关系 \(x+n\)\(y\)

二.食物链

  • 给定若干满足如下三条的关系,求有多少条件不合法:
    • \(x\)\(y\) 为同类
    • \(x\)\(y\)
    • \(x\)\(y\)\(y\)\(z\),则有 \(z\)\(x\)

  • 每个人存在三种关系,将三种关系分为三个集合:
    • 同类集(\(x\))
    • 可吃集(\(x+n\))
    • \(x\) 被吃的集(\(x+2n\)),后面简称为被吃集

  • 注意:拥有多种关系时,要进行关系传递。如 \(x\)\(y\) 同类,\(y\) 能吃的 \(x\) 也能吃。

  • 对于两种情况:
    • 如果 \(x\)\(y\) 是同类,就\(y\) 加入 \(x\) 的同类集,将 \(y\) 能吃的加入 \(x\) 的可吃集,将吃 \(y\) 的加入 \(x\) 的被吃集,即操作:
      add(x,y);//将y加入x的同类集(x)
      add(x+n,y+n);//将y可吃的加入x的可吃集(x+n)
      add(x+2*n,y+2*n);//将吃y的加入x的被吃集(x+2n)
      
    • 如果 \(x\)\(y\),就\(y\) 加入 \(x\) 的可吃集,将 \(x\) 加入 \(y\) 的被吃集,将 \(y+n\) 加入 \(x\) 的被吃集(根据关系 \(3\)\(y\)\(z\)\(z\)\(x\)),即操作:
      add(x+n,y);//将y加入x的可吃集(x+n)
      add(y+2*n,x);//将x加入y的被吃集(y+2n)
      add(x+2*n,y+n);//将y+n加入x的被吃集(x+2n)
      

总结

  • 分析每种个体存在多少种不同的关系,将这些关系分为不同的集合,最后通过并查集维护。

欢迎指出疏漏。

http://www.jsqmd.com/news/21694/

相关文章:

  • 软件工程学习日志2025.10.24
  • ABP - 种子数据 [IDataSeeder、DataSeedContext]
  • [KaibaMath]1014 基于取整函数[x]的定义求解一道特殊的一元二次方程
  • 基础题目
  • 完整教程:紫外UV相机在机器视觉检测方向的应用
  • 三种 Badcase 精度验证方案详解与 hbm_infer 部署实录
  • CF512E. Cycling City
  • ABP - 事件总线(Event Bus)[IEventBus、LocalEventBus、IntegrationEvent]
  • 【ArcMap】基本操作1:查看属性表Table、测量路线长度、打断点
  • CSP-S模拟37
  • Google Skills免费开放啦
  • ABP - 缓存(Caching)[IDistributedCache、ICacheManager、ICacheKeyNormalizer、[Cache]、[CacheInvalidate]]
  • 好想成为人类啊——2025 . 10 . 24
  • 10 24(+第14场补题)
  • 详细介绍:C++ 位运算 高频面试考点 力扣 268. 丢失的数字 题解 每日一题
  • 详细介绍:第十六届蓝桥杯软件赛C组省赛C++题解(京津冀)
  • 《打造自己的 DeepSeek》第 1 期:为什么要打造自己的 DeepSeek?
  • ret2text
  • ABP - 异常处理(Exception Handling)[AbpExceptionFilter、UserFriendlyException、IExceptionSubscriber]
  • 2025年沸腾干燥机厂家权威推荐榜单:专业直销与高效节能技术深度解析,提供优质沸腾干燥设备及定制方案
  • CF Round 1046(#2135) 总结
  • 重组蛋白表达的几种类型介绍
  • Luogu P5479 [BJOI2015] 隐身术 题解 [ 紫 ] [ 多维 DP ] [ 交换维度 ] [ 后缀数组 ] [ 哈希 ]
  • 2025年10月23日
  • 大象《Thinking in Projects》读书笔记2
  • 06_DNS解析:从域名到IP地址
  • ABP - 接口授权 [Authorize、AllowAnonymous、IPermissionChecker]
  • 日总结 17
  • 杂题选做-3
  • 10.24每日总结