并查集(union)模板
来源:互联网 发布:ubuntu提示权限不够 编辑:程序博客网 时间:2024/06/18 15:16
并查集模板1(常用)
- int findset(int x)//查
- {
- if(x != father[x])
- father[x]=findset(father[x]);//查的过程中进行路径压缩,有效加快并查集运算
- return father[x];
- }
- int unionset(int a, int b)//并
- {
- int x=findset(a);
- int y=findset(b);
- if(x != y) //不在同一根上,进行合并操作
-
- father[y]=x;
- return 0;
- }
并查集模板2
- int parent[Max]; //记录结点的双亲
- int rank[Max]; //记录结点的深度
- void init(int n) //初始化
- {
- int i;
- for(i=0;i<=n;i++)
- {
- parent[i]=i;
- rank[i]=1;
- }
- }
- int find(int x) //查找
- {
- int t=x, temp;
- while(parent[x]!=x) //找所属集合,即根结点
- x=parent[x]; //x为最终找到的根节点
- while(parent[t]!=x)
- {
- //路径压缩,使深度不为1的点向上浮。
- temp=parent[t];
- parent[t]=x;
- rank[t]=1;
- t=temp;
- }
- return x;
- //x为最终找到的根节点
- }
- void merge(int x,int y) //合并
- {
- int tx=find(x);
- int ty=find(y);
- if(tx!=ty) //路径压缩 ,合并操作,离根距离更远的节点,向近的合并靠拢
- {
- if (rank[tx]<rank[ty])
- {
- parent[ty]=tx;
- rank[ty]+=rank[tx];
- rank[tx]=1;
- }
- else
- {
- parent[tx]=ty;
- rank[tx]+=rank[ty];
- rank[ty]=1;
- }
- }
- }
0 0
- 并查集(union)模板
- 并查集(union-find)模板
- Union-Find Set 并查集 详解 [基本模板]
- 并查集(Union-Find Set)模板
- 并查集(Union-Find)
- Union Find 并查集
- 并查集Union--Find
- 并查集Union-Find
- union-find(并查集)
- 并查集- Union-Find
- union find(并查集)
- 并查集模板
- 并查集模板
- 并查集模板
- 并查集模板
- 【模板】并查集
- 并查集模板
- 并查集模板
- Data Binding-初学篇-(1)
- 今日BBC
- linux vi 退出和chow用法
- edgesForExtendedLayout属性解析
- 安卓学习日记20160328
- 并查集(union)模板
- Java集合
- phabricator邮件发送问题解决
- POJ 3258 River Hopscotch(贪心+二分查找 最大化最小值)
- 利用chart函数实现折线图
- 亿起发接口
- Fresco简单的使用—SimpleDraweeView
- 操作技巧:将 Spark 中的文本转换为 Parquet 以提升性能
- JS及JQuery对Html内容编码,Html转义