数据结构-并查集

数据结构-并查集

并查集(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)

相关推荐
叶小鸡3 分钟前
小鸡玩算法-力扣HOT100-堆
数据结构·算法·leetcode
何陋轩42 分钟前
【重磅】悟空来了:国产AI编程助手深度测评,能否吊打Copilot?
人工智能·算法·面试
逸风尊者1 小时前
XGBoost模型工程使用
java·后端·算法
小苗卷不动1 小时前
OJ练习之疯狂的自我检索者(简单)
c++
LUVK_1 小时前
第七章查找
数据结构·c++·考研·算法·408
迷途之人不知返2 小时前
vector
c++
khalil10202 小时前
代码随想录算法训练营Day-31贪心算法 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树
数据结构·c++·算法·leetcode·贪心算法·二叉树·递归
小苗卷不动2 小时前
进程与线程的核心区别
c++
lihihi2 小时前
P9936 [NFLSPC #6] 等差数列
算法
啊我不会诶2 小时前
2024ICPC西安邀请赛补题
c++·算法