热门

最新

红包

立Flag

投票

同城

我的

发布
as4589sd
阿啄debugIT
3 年前
trueas4589sd

什么是并查集(Disjoint-set)
对于一个集合S={a1, a2, ..., an-1, an},我们还可以对集合S进一步划分: S1,S2,...,Sm-1,Sm,我们希望能够快速确定S中的两两元素是否属于S的同一子集。
举个栗子,S={0,1, 2, 3, 4, 5, 6},如果我们按照一定的规则对集合S进行划分,假设划分后为S1={1, 2, 4}, S2={3, 6},S3={0, 5},任意给定两个元素,我们如何确定它们是否属于同一子集?某些合并子集后,又如何确定两两关系?基于此类问题便出现了并查集这种数据结构。
并查集有两个基本操作:

Find: 查找元素所属子集

Union:合并两个子集为一个新的集合
int find(int x)
{
if(x==pre[x])
return x;
else
return pre[x] = find(pre[x]);
}
void join(int x, int y)
{
int xx = find(x);
int yy = find(y);
if(xx!=yy)
pre[yy] = xx;
}

码友杂谈区
CSDN App 扫码分享
分享
1
1
打赏
  • 复制链接
  • 举报
下一条:
我以为你不爱我了呢。
立即登录