首页 > 其他分享 >并查集学习笔记

并查集学习笔记

时间:2024-12-05 12:10:20浏览次数:10  
标签:10 le int 查集 笔记 学习 fa find

一、例题引入

洛谷P3367

【模板】并查集

题目描述

如题,现在有一个并查集,你需要完成合并和查询操作。

输入格式

第一行包含两个整数 $N,M$ ,表示共有 $N$ 个元素和 $M$ 个操作。

接下来 $M$ 行,每行包含三个整数 $Z_i,X_i,Y_i$ 。

当 $Z_i=1$ 时,将 $X_i$ 与 $Y_i$ 所在的集合合并。

当 $Z_i=2$ 时,输出 $X_i$ 与 $Y_i$ 是否在同一集合内,是的输出
Y ;否则输出 N

输出格式

对于每一个 $Z_i=2$ 的操作,都有一行输出,每行包含一个大写字母,为 Y 或者 N

样例 #1

样例输入 #1

4 7
2 1 2
1 1 2
2 1 2
1 3 4
2 1 4
1 2 3
2 1 4

样例输出 #1

N
Y
N
Y

提示

对于 $30%$ 的数据,$N \le 10$,$M \le 20$。

对于 $70%$ 的数据,$N \le 100$,$M \le 10^3$。

对于 $100%$ 的数据,$1\le N \le 10^4$,$1\le M \le 2\times 10^5$,$1 \le X_i, Y_i \le N$,$Z_i \in { 1, 2 }$。

二、题目分析

可以看出,这是一道判断连通性的题目。因此,我们可以使用数据结构“并查集”来实现。

三、算法过程

我们可以将“将两个点连在一起”的操作转换为“将一个点认另一个点为父亲”的操作
初始时,每个点的父亲都为它本身。
在查询时,我们只需知道两个点的“老祖宗”是否是同一个点,即可判断两个点是否连通。

四、路径压缩

我们在查询“老祖宗”的过程中,可以动态更新“父亲”,这就是路径压缩

五、代码实现

#include<bits/stdc++.h>
#define N 10009
using namespace std;

int n,m;
int fa[N];

int find(int a){
	if(fa[a]==a)
		return a;
	return fa[a]=find(fa[a]);
}
void unite(int a,int b){
	fa[find(a)]=find(b);
}

int main(){
	cin>>n>>m;
	int i;
	for(i=1;i<=n;i++)
		fa[i]=i;
	int z,x,y;
	for(i=1;i<=m;i++){
		cin>>z>>x>>y;
		if(z==1){
			unite(x,y);
		}
		else{
			if(find(x)==find(y))
				cout<<"Y"<<endl;
			else
				cout<<"N"<<endl;
		}
	}
	return 0;
}

标签:10,le,int,查集,笔记,学习,fa,find
From: https://www.cnblogs.com/ACTVnews-JosefOckmode/p/18588237

相关文章

  • 黑客将利用机器学习发起攻击的 10 种方式
    黑客的网络攻击阶段可以根据不同的模型和描述有所差异,但通常都包括侦查与信息收集、扫描与漏洞发现、攻击与权限获取、维持与后门植入以及痕迹清除与隐匿等关键步骤。黑客隐藏自己会使用代理服务器、VPN、Tor网络、匿名操作系统(Tails和whonix)、或社会工程学欺骗、诱导目标......
  • WPF笔记9——设置应用程序单实例运行
    设置WPF应用程序单实例运行**方式1:**///<summary>///InteractionlogicforApp.xaml///</summary>publicpartialclassApp:Application{///<summary>///程序启动///</summary>///<pa......
  • 强化学习理论-第6课-随机近似与随机梯度下降
    6.1motivatingexample:meanestimation采样足够多进行平均迭代求平均:\(w_{k+1}=w_k-\frac{1}{k}(w_k-x_k)\)6.2Robbins-MonroalgorithmRM算法的优点是:不需要知道方程表达式,也不需要知道梯度信息啥的。随机梯度算法是RM算法的一种特殊情况。求根问题:RM算法......
  • 【学习笔记总结】华为云:应用上云后的安全规划及设计
    一、背景和问题        数字化时代,随着信息技术的飞速发展,企业和各类组织纷纷将自身的应用程序迁移至云端。云计算凭借其诸多优势,如成本效益、可扩展性、灵活性以及便捷的资源共享等,已然成为了现代业务运营的重要支撑。    今年,我所在企业也将IT系统全面迁移......
  • 来学习typescript 吧! --4 数组类型
    1.类型[]letarr1:number[]=[1,2,3]letarr2:string[]=['a','b','c']letarr3:(number|string)[]=[1,'a',2,'b'] 2.Array<类型>数组泛型letarr4:Array<number>=[1,2,3]letarr5:Array&l......
  • C语言笔记--文件操作
    为什么使用文件使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),......
  • OSG开发笔记(三十七):OSG基于windows平台msvc2017x64编译器官方稳定版本OSG3.4.1搭建环境
    前言  自行编译的osg版本插件比较多,如果对版本没有特定要求,但是对环境编译器有特定要求,可以反向融合编译器符合要求的osg版本。 OSG下载过程  osg官网:http://www.osgchina.org        由于我们不使用osgQt模块,下载了也无所谓,反正不用,这里是osg3.6.4......
  • 挖矿病毒流量特征学习
    矿病毒流量特征分析1.如何判断服务器感染了挖矿病毒1.1查看服务器cpu运行状态top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。  ps命令 ps–aux|sort–rn–k+3|headfree命令 2. 查看网络流量,观......
  • 来学习typescript 吧! --3 对象、接口类型
     1、ObjectObject类型是所有Object类的实例的类型。由以下两个接口来定义:Object接口定义了Object.prototype原型对象上的属性ObjectConstructor接口定义了Object构造函数上的属性Object接口包含很多属性,如:constructor、hasOwnProperty、isPrototypeOf、propertyIsEn......
  • 从0开始机器学习--12.决策分析-运筹优化与数学建模(决策分析方法,评价模型-层次分析法AH
    写在前面这些内容准确来说严格意义上不属于机器学习,把这部分内容归在这篇专栏中,主要原因之一是:机器学习算是与评价模型有关,且机器学习可以解决数学建模的问题。(其实就是我不想让这篇文章没有专栏归属,就把它聚类到这里了,后续若有更新其他运筹或数模的文章会再单独分类的~)机器......