首页 > 编程语言 >算法笔记之并查集

算法笔记之并查集

时间:2023-04-01 12:14:17浏览次数:32  
标签:return int 查集 笔记 查询 算法 集合 find

一、并查集的定义

并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。常常在使用中以森林来表示。

并查集,顾名思义,支持以下两种操作操作:

  • 并(Union):把两个不相交的集合合并为一个集合。

  • 查(Find):查询两个元素是否在同一个集合中。

二、并查集的实现

并查集往往用树来存,使用 \(f\) 数组表示每个节点的父节点,初始 \(f_i=i\),即认自己为父亲,

那么我们就可以得到这样的一颗树:

image

查询

查询 \(x\) 的根节点就是找到其祖先。

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

但这样会有一个问题:当数据很大时,树的深度会很高,所以我们需要压缩路径。

我们可以在查询的过程中,让 \(x\) 认自己的祖先为父亲,那么就可以大大缩小深度。

优化代码如下:

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

\[这个人颓废去了,n年后再更 \]

标签:return,int,查集,笔记,查询,算法,集合,find
From: https://www.cnblogs.com/FHenryh/p/find-and-union.html

相关文章

  • javascript 学习笔记3
    和let一样,通过const定义的变量不会被提升到顶端。const变量不能在声明之前使用。回调函数曾经是JavaScript中实现异步函数的主要方式。=>的使用:functiondoStep1(init,callback){constresult=init+1;callback(result);}functiondoStep2(init,callback){......
  • 鸿蒙开发学习笔记-UIAbility-Router页面跳转接口源码分析
    在鸿蒙开发中,UIAbility的跳转使用router方法.在使用的时候需导入importrouterfrom'@ohos.router';该方法接口成员如下:1.interfaceRouterOptionsinterfaceRouterOptions{url:string;//跳转页面的Urlparams?:Object;//传给跳转页面的参数params......
  • [JSP] 笔记
    JSPjavaserverpagesjava服务端页面jsp=java+html为什么用JSP?JSP为动态页面而生,当页面需要展示动态的数据时,我们不可能像下图这样用servlet中的write写整个页面。那样太过繁琐和复杂。JSP的作用:简化开发,避免用Servlet输出HTML标签。JSP原理JSP本质上......
  • 基于凸集上投影(POCS)的聚类算法
    POCS:ProjectionsontoConvexSets。在数学中,凸集是指其中任意两点间的线段均在该集合内的集合。而投影则是将某个点映射到另一个空间中的某个子空间上的操作。给定一个凸集合和一个点,可以通过找到该点在该凸集合上的投影来进行操作。该投影是离该点最近的凸集内的点,可以通过最小......
  • [Response对象] 笔记
    response用来设置响应数据响应数据结构响应行HTTP/1.1200OK响应头Content-Type:text/html响应体<h1>HelloWorld!</h1>重定向(Redirect)一种资源跳转方式//重定向//1.设置响应状态码response.setStatus(302);//2.设置响应头response.setHeader("Lo......
  • [Mybatis] 笔记
    一、入门使用步骤1.pom.xml添加相关依赖<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.11</version></dependency><dependency><groupId>mysql</grou......
  • 【LBLD】小而美的算法技巧:前缀和数组
    【LBLD】小而美的算法技巧:前缀和数组一维数组中的前缀和classNumArray{private:vector<int>preSum;public:NumArray(vector<int>&nums){preSum.push_back(0);for(inti=1;i<nums.size()+1;i++){preSum.push_back(......
  • 机器学习随堂笔记(1)
    范数:  0范数:  它表示向量非零元素的个数。 1范数:  也就是麦哈顿距离 2范数:  也就是欧式距离内积(点积、点乘):外积:两个向量的外积,又叫向量积、叉乘等。外积的运算结果是一个向量而不是一个标量。两个向量的叉积与这两个向量组成的坐标平面垂直。 ......
  • 读SQL进阶教程笔记04_集合运算
    1. 集合论是SQL语言的根基1.1. UNION1.1.1. SQL-86标准1.2. NTERSECT和EXCEPT1.2.1. SQL-92标准1.3. 除法运算(DIVIDEBY)1.3.1. 没有被标准化2. 注意事项2.1. SQL能操作具有重复行的集合,可以通过可选项ALL来支持2.1.1. 不允许重复2.1.1.1. 直接使......
  • mp雪花算法生成的id到前端丢失精度问题
    mp生成的id是Long型18位,但是js处理到16位就四舍五入了,解决办法就是在服务器转成字符串传给前端  WebMvcConfig要继承WebMvcConfigurationSupport,重写里面的extendMessageConverters方法@OverrideprotectedvoidextendMessageConverters(List<HttpMessageConv......