数据结构-并查集

数据结构-并查集

并查集(Disjoint-Set)是一种可以动态维护若干个不重叠的集合,并支持合并与查询的数据结构。

get操作查询一个元素属于哪一个集合。

merge操作把两个集合合并成一个大集合。

C++ 复制代码
//并查集的存储
int fa[N];
//并查集的初始化,时间复杂度O(n)
//设有n个元素,起初所有元素各自构成一个独立的集合,即有n棵1个点的树。
for(int i=1;i<=n;i++) fa[i]=i;
//并查集的get操作
//若x是树根,则x是集合代表,否则递归访问fa[x]直至根节点。
int get(int x)
{
    if(fa[x]==x) return x;
    return fa[x]=get(fa[x]);
}
//并查集的merge操作
//合并元素x和元素y所在的集合,等价于让x的树根作为y的树根的子节点。
void merge(int x,int y)
{
    fa[get(x)]=get(y);
}

P3367 【模板】并查集 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

相关推荐
boss-dog2 小时前
崩溃信息追溯——backward-cpp
c++·debug·backward-cpp
晚枫~3 小时前
图论基础:探索节点与关系的复杂网络
网络·数据结构·图论
Hankin_Liu的技术研究室3 小时前
深入理解 C++ happens-before:高级并发程序员的必修课
c++
liu****4 小时前
20.哈希
开发语言·数据结构·c++·算法·哈希算法
爱和冰阔落4 小时前
【C++多态】虚函数/虚表机制与协变 、override和final关键字全解析
开发语言·c++·面试·腾讯云ai代码助手
码住懒羊羊4 小时前
【C++】stack|queue|deque
java·开发语言·c++
“αβ”4 小时前
了解“网络协议”
linux·服务器·网络·c++·网络协议·tcp/ip·tcp
夏鹏今天学习了吗4 小时前
【LeetCode热题100(47/100)】路径总和 III
算法·leetcode·职场和发展
smj2302_796826524 小时前
解决leetcode第3721题最长平衡子数组II
python·算法·leetcode
恒者走天下4 小时前
选cpp /c++方向工作职业发展的优缺点
c++