zoukankan
html css js c++ java
并查集
/* UnionFindSet.h 并查集,非递归方法,含路径压缩,数组从0开始 合并时,前者合并入后者,不区分大小 */ #include <iostream> using namespace std; #define MAXN 30005 class UFS { public: int n; int father[MAXN+1];//集合根结点 int rank[MAXN+1]; //集合中点的个数 int depth[MAXN+1]; //每个结点改变一次所属的集合,增加一些值 public: UFS(int size = MAXN); void clear(); int Find(int x); //a并入b中,不区分大小 //value表示:如果a并入b中,a中r所有元素能获得的值 void Union(int a, int b, int value = 0); }; UFS::UFS(int size):n(size) { //必须从0开始 for(int i = 0; i <= n; i++) { father[i] = i; rank[i] = 1; depth[i] = 0; } } void UFS::clear() { for(int i = 0; i <= n; i++) { father[i] = i; rank[i] = 1; depth[i] = 0; } } int UFS::Find(int x) { int temp = x,sum = 0,ans; while(temp != father[temp]) { sum = sum + depth[temp]; temp = father[temp]; } ans = temp; while(x != ans) { sum -= depth[x]; depth[x] += sum; temp = father[x]; father[x] = ans; x = temp; } return ans; } void UFS::Union(int a, int b,int value) { int x = Find(a); int y = Find(b); if(x == y) return ; if(value >= 0) depth[x] = value; else depth[x] = rank[y]; rank[y] += rank[x]; father[x] = y; }
查看全文
相关阅读:
OO第四单元单元总结
OO第三单元单元总结
OO第二单元单元总结
OO第一单元单元总结
Java虚拟机解释器与编译器
20155321 《Java程序设计》实验三 敏捷开发与XP实践
20155321 2016-2017-2 《Java程序设计》第十周学习总结
20155321 2016-2017-2 《Java程序设计》第九周学习总结
20155321实验二 Java面向对象程序设计
20155321 2016-2017-2 《Java程序设计》第八周学习总结
原文地址:https://www.cnblogs.com/windmissing/p/2559888.html
最新文章
blogbeta1
homework-//2017-12-27 11:11 星期三
JS
css
[BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
[UOJ #58][WC2013]糖果公园(树上带修改莫队)
[BZOJ 2120]数颜色(带修改莫队)
[BZOJ 1078][SCOI2008]斜堆(可并堆)
[UOJ #180][UR #12]实验室外的攻防战(树状数组)
[BZOJ 2006][NOI2010]超级钢琴(ST表+堆)
热门文章
[BZOJ 4418][Shoi2013]扇形面积并(树状数组+二分)
[BZOJ 4415][Shoi2013]发牌(树状数组+二分)
[BZOJ 4423][AMPPZ2013]Bytehattan(并查集+平面图转对偶图)
[BZOJ 4551][Tjoi2016&Heoi2016]树(并查集)
[BZOJ 3211]花神游历各国(并查集+树状数组)
[BZOJ 1412][ZJOI2009]狼和羊的故事(最小割)
[BZOJ 2424][HAOI2010]订货(费用流)
[BZOJ 2127]happiness(最小割)
[BZOJ 1221][HNOI2001]软件开发(费用流)
Day1
Copyright © 2011-2022 走看看