并查集模版
来源:互联网 发布:女生做软件测试前景 编辑:程序博客网 时间:2024/05/06 12:12
#include<stdio.h>
#define M 10000+10
int pr[M]; // 父类的数组
int rank[M]; //深度
void init()// 数据的初始化
{
for(int i=0;i<M;i++)
{
pr[i]=i;
rank[i]=1;
}
}
int find(int x)// 查找
{
int r=x; // 一般的情况就这么写。
while(r!=pr[r])
r=pr[r];
//路径压缩 手动模拟压缩 时间上也不受数量的影响
int i=x;int j; // 也是可以用 递归 return x==pr[x]?x:find(pr[x]);
while(i!=r) //这个递归也包含了路径压缩。但是对于 数量大 会很费时间
{
j=pr[i];
pr[i]=r;
i=j;
}
return r; // 返回根节点
}
void join (int x,int y) // 连通
{
int fx=find(x);
int fy=find(y); // 这里也有一种优化 启发式合并
if(fx!=fy) //只有两个的根节点不同 才需要连通
{
if(rank[fx]>=rank[fy]) // 总是 将短的 附属到长的上
{
pr[fy]=fx;
rank[fx]=rank[fx]+rank[fy];
}
else
{
pr[fx]=fy;
rank[fy]=rank[fy]+rank[fx];
}
}
}
int main()
{
return 0;
}
#define M 10000+10
int pr[M]; // 父类的数组
int rank[M]; //深度
void init()// 数据的初始化
{
for(int i=0;i<M;i++)
{
pr[i]=i;
rank[i]=1;
}
}
int find(int x)// 查找
{
int r=x; // 一般的情况就这么写。
while(r!=pr[r])
r=pr[r];
//路径压缩 手动模拟压缩 时间上也不受数量的影响
int i=x;int j; // 也是可以用 递归 return x==pr[x]?x:find(pr[x]);
while(i!=r) //这个递归也包含了路径压缩。但是对于 数量大 会很费时间
{
j=pr[i];
pr[i]=r;
i=j;
}
return r; // 返回根节点
}
void join (int x,int y) // 连通
{
int fx=find(x);
int fy=find(y); // 这里也有一种优化 启发式合并
if(fx!=fy) //只有两个的根节点不同 才需要连通
{
if(rank[fx]>=rank[fy]) // 总是 将短的 附属到长的上
{
pr[fy]=fx;
rank[fx]=rank[fx]+rank[fy];
}
else
{
pr[fx]=fy;
rank[fy]=rank[fy]+rank[fx];
}
}
}
int main()
{
return 0;
}
0 0
- 并查集模版
- 并查集模版
- 并查集模版
- 并查集模版
- 并查集模版
- 并查集模版
- 并查集模版
- [模版]并查集
- 并查集模版
- 并查集的模版
- 1092: 并查集模版
- hdu 1272 并查集模版
- 【模版】并查集 及路径压缩
- 并查集模版&最小生成树
- 并查集的基本操作模版
- 洛谷 3367_[模版] 并查集
- vijos1034 家族(并查集模版)
- CD收藏 并查集 模版
- 463. Island Perimeter
- Koa中间件(middleware)实现探索
- 在Windows和Linux系统下隐藏痕迹的小技巧
- Android撕美女衣服小案例
- 泛型算法
- 并查集模版
- 使用idea配置maven(入门)
- 计算机介绍
- 冒泡排序
- xmlspy5.0商业版注冊(非常有用的xml软件)!!!
- fft蝶型图原理及实现
- 考研复试系列——第二节 最大堆&最小堆
- VS2008编写tcp客户端上位机与STM32单片机通信(结构体)
- [BZOJ1233][Usaco2009Open]干草堆tower(dp+决策单调性)