并查集(理解)
来源:互联网 发布:经营淘宝店成功案例 编辑:程序博客网 时间:2024/06/07 19:18
并查集由一个整数型的数组和两个函数组成
路径压缩算法
pre[]数组记录了每个点的前导点是什么,函数find()是查找,函数merge()是合并。
初始化函数,让自己就是自己的掌门void init(){for(int i=1;i<=n;i++) pre[i]=i; }
这里不知道谁是掌门,每个人只知道自己的上级是谁,要想找掌门就要一级一级向上查。
查找根节点
int find(int r)//查找r的掌门(根节点) {while(pre[r]!=r)//如果r的上级不是r自己,说明r不是掌门{r=pre[r];//让r接着找她的上级,直到找到掌门为止 }return r;//找到掌门啦 }
路径压缩算法
int find(int r){if(pre[r]=r)return r;else{/*路径压缩,每次函数在返回的时候,把各自的上级改为掌门,这样能提高找到掌门的速度*/ pre[r]=find(pre[r]);return pre[r];} }
改成如下图所示的样子 6的上级是4,4的上级是2,2的上级是1,通过find函数知道6的掌门人是1,路径压缩就是让2,4的掌门人也是1。
合并 判断 u,v是否连通,如果没连通,就把她们所在的连通分支合并起来。void merge(int u,int v){int t1=find(u);int t2=find(v);if(t1!=t2)//判断他们的掌门是否相同{pre[t2]=t1;//靠左原则(其实随便啦)让t2的掌门是t1 } }
阅读全文
0 0
- 并查集(理解)
- 并查集理解
- 并查集理解
- 并查集理解
- 并查集理解(1)
- 并查集深入理解
- 彻底理解并查集
- 并查集的理解
- hdu--1232--并查集(很好理解)
- 并查集(集并查)
- 【算法】并查集如何理解。
- 关于对并查集的理解
- 并查集的理解及用法
- 趣味理解并查集算法
- 并查集(Union-Find)算法理解
- 最好理解的并查集详解
- 【并查集】POJ1611-The Suspects + 并查集简单理解
- 并查集(含关系并查集)
- git创建分支,并将代码上传至其他分支
- pat 1056. 组合数的和(15)及其简单的扩展
- RPG的错排(组合数+错排)
- 数字图像处理实验(二)
- Android记录处理时间的各种方法
- 并查集(理解)
- 读书
- stm32的串口发送16进制数据,上位机16进制显示
- h5新标签video详解
- SQLite剖析之功能特性
- 深入了解MyBatis参数
- 空函数、裸函数与函数传参和堆栈平衡
- Js关于getElmentsByClassName()的兼容与封装
- python语法介绍