随笔分类 -  并查集

并查集小结
摘要:最近做了点并查集的题,感觉也挺简单的。下面对我这段时间关于并查集的学习,做一下小结。并查集的作用:并和查,即合并和查找,将一些集合合并,快速查找或判断某两个集合的关系,或某元素与集合的关系,或某两个元素的关系。并查集的结构:并查集主要操作对象是森林,树的结构赋予它独特的能力,对整个集合操作转换为对根节点(或称该集合的代表元素)的操作,一个集合里的元素关系不一定确定,但相对于根节点的关系很明了,这也... 阅读全文
posted @ 2010-07-16 14:44 ylfdrib 阅读(1261) 评论(0) 推荐(1)
pku1182 并查集 (偏移量处理)
摘要:题目链接:食物链中文题目,题意很好理解。类似于poj2492 A Bug's Life在这里动物只有3种A,B,C,如果A吃B,我们可以将A对B的偏移量定为1。这题关键在于用一个数组记录每个点相对于根节点的偏移量,在合并两个集合的时候,注意保持当前两个节点的偏移量差为1, 在路径压缩过程中,依然采用递归形式,将路径上的偏移量层层改变,如果A和B偏移量之差为1, A吃B;如果为0, 表示为同类。关键... 阅读全文
posted @ 2010-07-16 13:56 ylfdrib 阅读(739) 评论(0) 推荐(0)
hdu1558 几何处理 + 并查集
摘要:题目:Segment set分析:并查集。这题有两个关键点。第一点:如何判断两条线段是否有交点。第二点:快速查找某条线段所在集合里的线段条数,用并查集实现。线段A(x1,y1)-B(x2,y2),所在直线L1方程为F1(x,y)=0;线段C(x3,y3)-D(x4,y4),所在直线L2方程为F2(x,y)=0;如何判断两条线段有交点:(A,B在直线L2两侧) AND (C,D在直线L1两侧)。用数... 阅读全文
posted @ 2010-07-15 18:16 ylfdrib 阅读(933) 评论(0) 推荐(0)
hdu1198 并查集
摘要:题目:Farm Irrigation这题很不错的,给的图片让人想不到是并查集,我第一次做的时候用dfs()过的,最近在看并查集,才知道并查集也可以做。关键在于如何建图,如何找到相连关系。对每张图片分析就会知道,每块地的水管都是在中间,分为上、下、左、右四个方向可以通水,分两种模式,一种水平相邻,一种竖直相邻,判断他们能不能相通,先预处理得到每两个字符所代表的土地的关系,读入数据后,对应处理,将每块... 阅读全文
posted @ 2010-07-15 08:48 ylfdrib 阅读(1176) 评论(0) 推荐(0)
pku2492 并查集
摘要:题目链接:A Bug's Life分析:很经典的一道并查集,这题关键在如何维护每一个点到集合顶点的偏移量。第一次了解偏移量,还是挺有收获的!对于两个点x,y,分别找到他们的根节点fx,fy。(fx = find(x); fy = find(y);)如果fx == fy则找到一对同性恋者,return,否者:bin[fx] = fy; fx指向fy,为了保证x和y为异性,即相对根节点的偏移量不同,f... 阅读全文
posted @ 2010-07-14 18:09 ylfdrib 阅读(501) 评论(0) 推荐(0)
pku1611 并查集
摘要:题目链接:The Suspects很简单的一道并查集,关键在如果保存每个集合的元素个数和如何合并处理。值得学习的一点:把当前集合的元素个数存在根节点上,每次合并的时候,对根节点进行操作即可。应用归类:集合合并,判断两点是不是在同一个集合,查找某一个集合上的元素个数等。代码 阅读全文
posted @ 2010-07-14 11:16 ylfdrib 阅读(388) 评论(0) 推荐(0)