并查集 合集

我对一类带权值的并查集的理解。  每个点对他父亲的边 就是链接这两点之间的关系。 通过这个关系 把所有的子节点都指向 最后的大根节点。

然后利用递归的形式,更新所有关系; 使原来 满足他父亲的关系的边,再转化到 大根节点的时候边的关系正确。

比如  A-> B-> C->D->E

现在只有 A->B B->C  C->D D->E 的关系。

然后 通过C->D D->E 可知道  C->E 的关系。

然后 由 B->C  C->E   可知道 B-> E 的关系;

然后 由A-> B B-> E   可知道 A->  E 的关系。

这样每个节点都指向 大根节点 E 

 

对于两个并查集的合并  比如 有 A-> B   A->F F->E 的关系 。 B 和E 都是并查集的大根节点 。

通过

            A   -> F

            ^         ^

            |          |

           B        E

 

 

这样就可以知道 B-> E的关系。

这个东西在张清泉 大牛的ppt 里面有详细的说明。 2010_bputacm_第一次交流_wolf5x.ppt

(好的题目在前面。难度可能相对较大)

ural 1003   很经典的题目,很多论文上都有对他的讲解。

主要思路跟上面差不多。 比较好的就是 把奇偶加减的转化成为  xor 亦或符号(奇数加减奇数。偶数加减偶数可以看成 1^1,0^0   而偶数 加减奇数 或者 奇数加减偶数 可以看成 0^1 1^0),节约时间。一个小小的优化。非常不错。位运算确实强大。

黑书傻姑娘  82 页 的题目。开始想错了。 一开始一直没想清楚中间的处理,因为觉得如果给的区间只有2 给的是偶数,岂不就只有是两个1.其实不是,没有考虑到还可以是0个1.

 

 

 

ural 1701 其实就是食物链和ural1003的变种。这道题我做的非常好,1y 这让我内流满面。后来看石牛的思想,居然一样,看来我确实进步了。也许渐渐思想会进步,也有可能是人品。  还有就是这道题 ural 给的几个数据很好。其实是降低了 trik 的难度。

 

ural 1701 题意:0的工资为0

n m

5 6

3 4 1200 代表 3比4多了1200的权值。

4 1 -5500

2 3 4300

3 0 8200

0 4 -7000

2 1 0

让你求不符合的第一组。

算法: 带权值的并查集

这道题需要注意:

1, 并查集的时候可能出现负的权值,所以要调换顺序 ,读入的时候使权值为正值。  然后并查的时候把小的作为根节点。但要保证 0 的权值一直是0.

2, 要注意的就是0的位置,因为没有出现0 之前所有的情况都是可以成立的。所以先处理0的情况。

其实这些都可以从题目当中的数据可以 体会出来。 所有数据很降低难度。

汪总 和石牛的思想也贴出来

http://bbs.byr.cn/article/ACM_ICPC/30648  论坛上的讨论

http://hi.baidu.com/wangkun_zhen/blog/item/cf707dfa6fc66363034f56d7.html  汪总的博客

 

poj 1182 我觉得应该算是基础。 不过这道题 discuss 提出的那种向量方法,觉得很受局限。不过想出此种方法的我膜拜之。此大牛也。

其实我觉得这道题应该是按三个并查集或者两个来做是正解。 因为如果题目食物链不是三个 ,而是4个,甚至一百个。这个方法才能解。而上面那种方法太特殊。

 

poj 1988 

题意: M a b, 代表含b的链要并到含a的链条的后面。  C代表 输出a 后面有多少个元素。

不知不觉就a了,我还以为会wa ,做法和 《算法艺术》那本书的 81页 ,银河英雄传说查不多。

三个 数组, 一个记录 father 一个记录 在此链 中他前面有多少个,一个记录 在此链 中他后面有多少个。 合并的时候跟新。

 

并查集的一些思想

并查集实现起来很简单,但要灵活运用是需要经验积累的。。。其实说穿了,并查集中的集合就是相互间已经建立起某种联系的元素的集合,比如某个家族的所有成员就构成了一个集合;如果两个元素属于不同的集合,那么他们之间一定没有关系; 假如这两个元素产生了某种关系(这就好比两个人结婚了)那么这两个集合中的所有元素之间也必然相应的建立起了联系,接下来为了分析问题的必要,就必须把这两个集合合并起来union ,这方面网上资料很多,就不多说了。

 

 

作poj 2827

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值