【并查集】总结12051229

一、应用。

1、  判断是否已建立关系。这种是最简单的,如冗余关系家族凌辱疯狂的涂色识别水果,都属于这一类,应用很简单。

2、  判断关系的种类。有一点点的变化,如食物链小胖的奇偶

二、处理方式。

1、  使用向量的思想表示关系。

2、  向量的叠加。一般先相加,如果有循环的关系,则取余。——如小胖的奇偶,奇偶性只有两种,根据奇偶合成的关系,我们把所有的偶数都统一成0,所有奇数都统一成1,规律是不会发生变化的,因此我们先相加再对2取余。——再如食物链,甲吃乙,乙吃丙,则丙吃甲,容易看出,这存在循环的关系,(1+1)%3=2刚好是1的相反向量的值,(2+2)%3=1也刚好是2的相反向量的值,容易想到,可以用0来表示关系相同。

3、  的减法。一般用加上相反向量来处理,注意有的情况下相反向量和向量是相等的,而有的时候却需要进行处理,通常是异或2^n-1这种,即每一位都取反。

4、  上可以使用补集表示法(不会),或者多开几个数组来维护关系的方法。

三、注意事项。

1、判断关系时总是要在一个三角形里操作。也就是说,要首先得到两个点的根节点,降低树的高度,如果两个点的根节点相同,则得到两条边,因此第三条边及两个点的关系便可以得到。

2、找父亲的时候,要首先把原来的父亲记录下来,再更新父亲,因为原来的父亲和根的关系还有用,也是一个三角形的关系。

3、增加关系时总是要在一个四边形里操作。也就是说,要首先得到两个点的根节点,降低树的高度,得到两条边,在加上这两个点的关系就三条边,以此来算出两个根的关系。

4、对于某些特定的,规模庞大的并查集的题目,要求我们找到一种合适的离散化的方法,为了解决空间问题,我们选择使用广义数组map,用它来存储父亲、和父亲的关系。但是注意的是,这里就不能鲁莽地将f[i]初始化为i,这会严重超时的!!!我们可以在使用的时候,判断一下,如果某一个值等于0,则将它更新为i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值