首页 > 其他分享 >并查集

并查集

时间:2024-04-11 19:15:48浏览次数:21  
标签:return 祖先 查集 fa int find

介绍

并查集主要用于处理一些不相交集合的合并问题,一些常见的用途有求联通子图,求最小生成树的Kruskal算法和求最近公共祖先等。

并查集的基本操作主要有:

  1. 初始化
  2. 查询
  3. 合并

操作

初始化
假设有编号为1,2,3……,n的n个元素,我们用一个数组fa[]来储存每个元素的父节点。一开始,我们先将他们的父节点设为自己。(因为一开始没有任何的关系)

查询
找到i的祖先直接返回,未进行路径压缩。

int fa[N];//fa[i]=j;表示i的祖先是j
int find(int i)
{
	if(fa[i]==i)
	{//递归出口,当到达了祖先的位置,就返回祖先。
		return i;
	}else
	{//不断向上查找祖先。
		return find(fa[i]);
	}
}

合并
1.找到i的祖先
2.找到j的祖先
3.i的祖先指向j的祖先

void unionn(int i,int j)
{
	int i_fa=find(i);//找到i的祖先
	int j_fa=find(j);//找到j的祖先
	fa[i_fa]=j_fa;//i的祖先指向j的祖先
}

路径压缩

int fa[N];//fa[i]=j;表示i的祖先是j
int find(int i)
{
	if(fa[i]==i)
	{//递归出口,当到达了祖先的位置,就返回祖先。
		return i;
	}else
	{
		fa[i]=find(fa[i]);//该步进行了路径压缩。

		return fa[i];//返回父节点。
	}
}

转载:
https://www.bilibili.com/video/BV1jv411a7LK/?spm_id_from=333.337.search-card.all.click&vd_source=abdc80f4e0104d1118647f0f7321464e

标签:return,祖先,查集,fa,int,find
From: https://www.cnblogs.com/miao-jc/p/18129850

相关文章

  • 【学习笔记】并查集
    一、普通并查集1.定义&作用并查集是管理元素分组的算法,可以高效对元素分组(合并为一组)以及查询两个元素是否在一组。2.主要思想&实现对于每一个组,设置一个“组长”,每一次合并时只需要将其中一组的组长设为另一组的组长,查询时只需要查询组长是否相同。每一个组都可以理解......
  • 【数据结构 | 并查集】维护元素分组信息,支持高效合并集合、查询元素所在集合
    文章目录并查集概述引入并查集的实现存储方式Union-Find抽象基类两种实现思路基本实现基于QuickFind思路基于QuickUnion思路优化基于size的优化基于rank的优化find优化路径压缩路径分裂路径减半总结并查集概述并查集(DisjointSetUnion,简称并查集),也叫......
  • CF455C. Civilization-并查集
    2100分的并查集(x)link:https://codeforces.com/contest/455/problem/C给一张无向森林,有若干次操作,有两种:询问\(x\)所在树的直径合并\(x,y\)所在的连通块,使得合并后的直径最小\(n,m,q\leq3\times10^5\)处理出每个连通块的直径,考虑如何合并两个连通块?设原来的直径分别......
  • 并查集(水题)
    A.是不是亲戚题目描述若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。规定:x 和 y 是亲戚,y 和 z 是亲戚,那么 x 和 z 也是亲戚。如果 x,y 是亲戚,那么 x 的亲戚都是 y 的亲戚,y 的亲戚......
  • 并查集概述
    目录并查集概述并查集一般要处理的问题并查集的实现方法最后(求看)并查集概述并查集是一种树型的数据结构,由于处理一些不相交集合的合并及查询问题。并查集思想是用一个数组表示了整片森林,树的根节点唯一是一个集合的标识,我们只要找到了某个元素的树确定它在哪个集合里。......
  • 高级数据结构-并查集plus(更新中。。。
    格子游戏题目链接:格子游戏思路:首先围成一个闭环的时候,两个点一定有边相连,那么可以把这两个点通过并查集连在一个连通块里面,如果两个点的父亲相同,那么就形成闭环。同时,为了方便可以将二维的图转化成一维的进行计算,k=x*n+y,x,y要从0开始统计。代码附上:#include<bits/stdc++.h......
  • 并查集——蓝桥杯备赛【python】
    一、合根植物试题链接:[蓝桥杯2017国C]合根植物问题描述星球的一个种植园,被分成m×n个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。如果我们告诉你哪些小......
  • 并查集解题思路
    概述并查集主要是解决以下几种问题的:各节点之间的关系某节点和它祖先之间的关系种类朴素并查集,一个集合的信息可以存储在它的祖先节点上。带权并查集,维护的是某节点与它祖先的关系。扩展域并查集(种类并查集),本质是多开几倍空间的朴素并查集,维护的是各个阵营之间的关系,且......
  • 并查集学习笔记
    并查集学习笔记本质上还是一个复习笔记。考虑这样一个问题:给出\(x,y\),合并\(x,y\)所在集合。给出\(x,y\),查询\(x,y\)是否在同一集合内。我们把集合当成一棵树,两个点有连边就表示他们在同一个集合内。这棵树的根节点就是这个集合的“老大”,也就是这个集合里面的......
  • 并查集
    并查集的作用检查图中是否存在环并查集的流程设定一个集合,叫并查集往集合里面添加边,怎么添加呢?取边的起点和终点,判断两点是否都在集合里面。如果都在,则出现了环,如果不在,则将两个点放入集合中。继续添加下一条边,直到没有边。如果最后都没有找到环,就是图中不存在环。并......