并查集
walkaway11
这个作者很懒,什么都没留下…
展开
-
poj 1182 食物链(并查集)
很典型的并查集,我们只需要找到A,B,C类,然后我们必须保存他们之间的关系,这个关系我们使用3进制表示,同类(0),吃(2),被吃(2).然后我们就有一定的变换关系了。rank[]//用来表示他与父节点的关系。1 x y(x,y同类),x所在集合的根节点a,y所在的根节点b.(a!=b)rank[x](x->a)==rank[y](y-->a)rank[a](a->b)=rank[y](y->b)原创 2009-04-14 19:25:00 · 762 阅读 · 0 评论 -
poj 2492 A Bug's Life(并查集)
最基础的并查集,是1182的简化版,这个只有两种关系,同类or异类,我们用个rank[]数组表示他们之间的关系,0:同类,1:异类。a-->b的关系满足传递性:a-->x-->y-->b; #include#includestruct{ int pre; int rank; }bug[2002];int n,pairs;void makeset(int t){ bug[t].pre=-原创 2009-04-14 19:32:00 · 1517 阅读 · 1 评论 -
并查集的基本知识
<br />对不相交集合进行俩种操作:<br />1. 检索某元素属于哪个集合<br />2. 合并两个集合<br />我们最常用的数据结构是并查集的森林实现,也就是说,在森林中,每棵树代表一个集合,用树根来标识一个集合,树的形态不重要,重要的是每棵树有哪些元素。<br />查找操作<br />查找一个元素v很简单,只需要顺着叶子到根节点的路径找到u所在的根节点,然后把v到u的路径上面的结点的父节点都设置为根节点,这样减少了查找的次数(路径压缩)。<br />合并操作<br />为了把两个集合s1和s2原创 2010-08-31 16:16:00 · 393 阅读 · 0 评论