并查集--模板
2018-02-06 22:25
190 查看
初始化pre数组,即父节点。
void init(){
for(int i=1;i<=MAX;i++)//n表示输入的结点的个数
{
pre[i]=i;//将每一个结点的前导点设置为自己
}
}带参数的初始化。
void init(int n){
for(int i=1;i<=n;i++)//n表示输入的结点的个数
{
pre[i]=i;//将每一个结点的前导点设置为自己
}
}find函数,查找根节点,这里还加了路径压缩。
int find(int x)
{
int r=x;
while(pre[r]!=r)
r=pre[r];//找到他的前导结点
int i=x,j;
while(i!=r)//路径压缩算法
{
j=pre[i];//记录x的前导结点
pre[i]=r;//将i的前导结点设置为r根节点
i=j;
}
return r;
}join函数,合并两个集合,具体谁当父亲谁当儿子要看题意。
void join(int x,int y)
{
int a=find(x);//x的根节点为a
int b=find(y);//y的根节点为b
if(a!=b)//如果a,b不是相同的根节点,则说明ab不是连通的
{
pre[a]=b;//我们将ab相连 将a的前导结点设置为b
//!!!!!!!!!!根据题意这里是 pre[a] = b 还是 pre[b] = a !!!!!!!!!!
}
else return;
}这是一个比较有趣的并查集详解 click here
void init(){
for(int i=1;i<=MAX;i++)//n表示输入的结点的个数
{
pre[i]=i;//将每一个结点的前导点设置为自己
}
}带参数的初始化。
void init(int n){
for(int i=1;i<=n;i++)//n表示输入的结点的个数
{
pre[i]=i;//将每一个结点的前导点设置为自己
}
}find函数,查找根节点,这里还加了路径压缩。
int find(int x)
{
int r=x;
while(pre[r]!=r)
r=pre[r];//找到他的前导结点
int i=x,j;
while(i!=r)//路径压缩算法
{
j=pre[i];//记录x的前导结点
pre[i]=r;//将i的前导结点设置为r根节点
i=j;
}
return r;
}join函数,合并两个集合,具体谁当父亲谁当儿子要看题意。
void join(int x,int y)
{
int a=find(x);//x的根节点为a
int b=find(y);//y的根节点为b
if(a!=b)//如果a,b不是相同的根节点,则说明ab不是连通的
{
pre[a]=b;//我们将ab相连 将a的前导结点设置为b
//!!!!!!!!!!根据题意这里是 pre[a] = b 还是 pre[b] = a !!!!!!!!!!
}
else return;
}这是一个比较有趣的并查集详解 click here
相关文章推荐
- POJ 2524 宗教信仰 并查集 基础模板
- 普通并查集模板
- poj 2236 Wireless Network(并查集模板题)
- 并查集 模板
- 洛谷P3367 【模板】并查集
- 并查集模板
- SDUTOJ [2801] 并查集模板
- 【数据结构】【并查集模板】
- 并查集模板
- 【并查集模板】并查集模板 luogu-3367
- 并查集(——模板习题与总结)
- hdu 1213 (How Many Tables)(简单的并查集,纯模板)
- 【HDU 1213】How many tables(并查集模板)
- UFS并查集 模板
- 【bzoj1455】【罗马游戏】左偏树+并查集(模板)
- HDU-1232/NYOJ-608畅通工程,并查集模板题,,水过~~~
- 【20171108】Luogu P3367 模板题:并查集
- 【模板】并查集
- 并查集简单模板及其解释
- POJ 2524 宗教信仰 并查集 基础模板