博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并查集模板
阅读量:4658 次
发布时间:2019-06-09

本文共 526 字,大约阅读时间需要 1 分钟。

并查集结构:

for 
(i = 0; i <= n; ++i)
 
f[i] = i;

查找祖先:

int 
find(
int 
x)
{
    
if 
(x != f[x])
    
{
        
f[x] = find(f[x]);
    
}
    
return 
f[x];
}

合并操作:

经常使用的:
void 
Union(
int 
x,
int 
y)
{
    
x = find(x);
    
y = find(y);
    
if 
(x != y)
    
{
        
f[y] = x;
        
num[x] += num[y];
//根记录子系的个数
    
}
}
还有一种写法:
void 
Union(
int 
root1,
int 
root2)
{
     
int 
x = FindSet(root1), y = FindSet(root2);
     
if
( x == y )
return 
;
     
if
( rank[x] > rank[y] ) parent[y] = x;
     
else
{
         
parent[x] = y;
         
if
( rank[x] == rank[y] ) ++rank[y];
     
}
}

转载于:https://www.cnblogs.com/10jschen/archive/2012/08/18/2644975.html

你可能感兴趣的文章
linux常用命令
查看>>
转:过滤器Filter配置总结
查看>>
python学习——读取染色体长度(七:读取fasta文件)
查看>>
java学习——集合框架(泛型,Map)
查看>>
MATLAB之画确定区域内互不接触的球
查看>>
CSE 421/521 – Operating Systems
查看>>
ref 游标(动态游标)
查看>>
CentOS虚拟机网卡配置
查看>>
Ubuntu配置pyethapp
查看>>
hdu 1551 恶心的卡精度题
查看>>
Android签名机制
查看>>
python 之Twsited
查看>>
设置SQL PLUS环境
查看>>
关于虚拟机VM
查看>>
springboot快速入门(三)——Controller的使用
查看>>
nodejs 解析excel文件
查看>>
eclipse、tomca和jvm的相关内存配置
查看>>
Asis CTF 2015-Car_Market
查看>>
Java基础之反射生成JDK动态代理
查看>>
ES5中数组新增的方法说明
查看>>