种类并查集

种类并查集

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

原理

集合中的元素直间存在两种关系,假设 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值