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; }
查看全文
相关阅读:
iOS学习之MVC,MVVM,MVP模式优缺点
iOS学习之单例模式
iOS学习之观察者模式
iOS学习之设计模式
iOS学习之SKTagView的使用
iOS学习之cocoaPods
iOS学习之git的使用
iOS学习之block
[学习笔记]一个实例理解Lingo的灵敏性分析
爬虫实例(二)——爬取某宝评论
原文地址:https://www.cnblogs.com/windmissing/p/2559888.html
最新文章
基于Danvici二开,扩展水滴图与进度条图
echarts-liquidfill报错,导致波纹动画不生效
element下拉框选项选中后未失焦的情况下,切屏其他应用后,再回到当前网页,下拉框选项会自动弹出
h5项目部署生产环境后如何自动清理缓存
el-dialog中设置了destroy-on-close属性为true,dom依旧未被销毁的两种解决方案
favicon.ico在IE中删除不掉
mac中webstrom 注释ctrl+/快捷键无效
el-table合并单元格
Python装饰器详解
Python中的魔法方法
热门文章
python2与python3在windows下共存
k8s笔记
Python OrderedDict使用
Ubuntu设置开机启动服务
asyncio
Ubuntu16配置静态IP
python 日期计算案例
python中常用的函数与库一
iOS学习之下拉刷新、上拉加载
iOS学习之MVC模式
Copyright © 2011-2022 走看看