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; }
查看全文
相关阅读:
python库fire使用简介
Ubuntu 下安装、使用tree 查看目录的树形结构
pandas dataframe.pivot()用法
聚享导航全新改版,安卓App上线啦
GCN网络学习
numpy.where() 用法和np.argsort()的用法
opencv-python 最小外接矩形_转载
RuntimeError: cuda runtime error (59) : device-side assert triggered(已解决)
从CSDN复制文章到微信
winscp无法上传,删除,修改文件并提示权限不够的分析
原文地址:https://www.cnblogs.com/windmissing/p/2559888.html
最新文章
springboot分析——与其他组件的整合(druid/mybatis)
springboot分析——servlet容器切换以及热部署
spring源码分析——事务的传播机制
spring源码分析——事务的实现原理
spring源码分析——Aop的流程
spring源码分析——bean的作用域
计算机世界的虚拟机,容器和医学界的人工硬脑膜
SAP Analytics Cloud和Cloud for Customer之间的Single Sign on配置
如何将SAP云平台Neo环境的Subaccount注册到IAS服务里
有感而发
热门文章
SAP Hybris(Commerce)安装recipe包含的三个任务,setup, initialize和start
SAP AMDP介绍
“Z医生,我明天的手术,成功率有多高?”
build.gradle里dependencies标签页的实现原理
build.gradle里repositories的mavenCentral实现原理解析
用Groovy读取本地文件的代码
理解PHP 依赖注入与容器
mysql 字符串拼接
oss 上传图片鉴权,临时权限
oss 计算sign签名 获取临时token
Copyright © 2011-2022 走看看