并查集基础题 POJ1611 POJ1703 POJ1988

来源:互联网 发布:如何彻底卸载java mac 编辑:程序博客网 时间:2024/05/01 05:56

刚学习了并查集,于是找了几道并查集的基础题来做,感觉掌握的不是很牢固,POJ1182食物链和ZOJ3261星星能量这两题都没能做出来..先放着,以后再做.

 

 

POJ1611 确定SARS病毒的传播圈,并查集的第一题,因为在学习阶段,所以就照着两种写法都写了一遍

1.初始化每个元素为独立集合,用rank来标记每个集合的人数,初始为1,然后每次合并跟新根的rank值,并且都是将较小的节点作为根,最后查看rank[0]就可以了

 

 

2.parent初始化为-1,每次合并的时候将parent值相加,最后parent值的相反数就是这个集合的人数.这种方法就是在回溯缩短路径的时候要注意返回的跟并不是根的parent,而是根的值.

 

 

两种方法的时间一样,后一种方法的占用内存稍微少一点

 

 

POJ1703 分两派黑帮,是食物链的简化版,想了一会毫无思路,只能靠度娘了,哎,什么时候才能不再是初学者啊~~

两种方法,都挺好的,都学习一下吧.

 

1.设置一个opp数组,x的敌人为opp[x], 分情况合并集合

 

 

2.用rank标记该点和根的关系,相同帮派为0,不同帮派为1 感觉重点就是回溯跟新rank.

 

 

 

POJ1988 每次移动a和b的所在列,最后查询c下面的方块数

其中below和stack两个参数一个是某个方块下面的方块数 和 某一列的高度,感觉这两个参数十分巧妙,注意在路径压缩时以及合并时要及时跟新,另外查询时也要进行一次跟新.

 

 

 

做了几题,感觉掌握了并查集的方法,但还没有掌握并查集的思想,任重而道远,继续努力吧!!!

 

原创粉丝点击