种类并查集

数据结构 专栏收录该内容
17 篇文章 0 订阅

种类并查集

在一般的并查集当中,普通并查集只能维护一般的等价类关系,如果存在多个等价类关系,就需要用到种类并查集了。

原理

集合中的元素直间存在两种关系,假设 A A A B B B的关系是关系1, B B B C C C的关系是关系 2 2 2,那么 A A A C C C一定存在关系,这种情况才能用种类并查集(即关系传递)。

例如:朋友与敌人关系,朋友的朋友是朋友,朋友的敌人是敌人,敌人的朋友是敌人,敌人的敌人是朋友。这种相互传递的关系才能用种类并查集,如果是单链的关系,是不能用种类并查集维护的。

我们创建三倍空间的大小的并查集,其中另外两个元素空间是原集合的拷贝。例如 A A A A ′ A' A A ′ ′ A'' A

A ′ A' A相等价的是A的朋友,和 A ′ ′ A'' A相等价的是A的敌人。比如A和B是朋友,那么就让 A ′ A' A B B B相连, B ′ B' B A A A相连。同时B的敌人仍是A的敌人,A的敌人也是B的敌人,所以 A ′ ′ A'' A B ′ ′ B'' B相连。构成的这样一种关系。同时我们还发现,第一个并查集空间并不表示任何空间,我们将这个并查集和 A ′ A' A合并,省去一个并查集空间。

切记,验证这个题是否符合种类并查集,要验证每一步合并都是合法合理的,例如,上述中, A ′ ′ A'' A B ′ ′ B'' B这两个合并,满足A的敌人和B的敌人相同,如果题目要求A的敌人是B的敌人,但是B的敌人不是A的敌人,那么这样连接并查集中的元素就是不合法的。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值