【算法】并查集

find函数

用于查找一个数字的祖宗数字
比如 初始时,每个数字的祖宗是自己 find(i) = i
若 要把 3 和 4 合并 则把3的祖宗设置为4 此时 p(find(3)) = 4
若 要把 5 和 3 合并, 则先找到5和3的祖宗, 再把5的祖宗设置为3的祖宗
p[find(5)]= find(3)

int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}

每次合并集合时只需要更改祖宗元素即可

合并集合

一共有 n个数,编号是 1∼n,最开始每个数各自在一个集合中。

现在要进行 m个操作,操作共有两种:

M a b,将编号为 a和 b的两个数所在的集合合并,如果两个数已经在同个集合中,则忽略这个操作;
Q a b,询问编号为 a和 b的两个数是否在同一个集合中;

输入格式
第一行输入整数 n和 m。

接下来 m行,每行包含一个操作指令,指令为 M a b 或 Q a b 中的一种。

输出格式
对于每个询问指令 Q a b,都要输出一个结果,如果 a和 b在同一集合内,则输出 Yes,否则输出 No。

每个结果占一行。

#include <iostream>using namespace std;int p[100100];int find(int a){if(p[a]!=a){p[a] = find(p[a]);}return p[a];
}int main(){int n,m;cin>>n>>m;int i=0;for(i=1; i<=n;i++){p[i] = i;}while(m--){string str;int a,b;cin>>str>>a>>b;if(str[0]=='M'){p[find(a)] = find(b);}else{if(find(a)==find(b)){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}}}
}

连通块中的点的数量

给定一个包含 n个点(编号为 1∼n)的无向图,初始时图中没有边。

现在要进行 m个操作,操作共有三种:

C a b,在点 a和点 b之间连一条边,a和 b可能相等;
Q1 a b,询问点 a和点 b是否在同一个连通块中,a和 b可能相等;
Q2 a,询问点 a所在连通块中点的数量;

输入格式
第一行输入整数 n 和 m

接下来 m行,每行包含一个操作指令,指令为 C a b,Q1 a b 或 Q2 a 中的一种。

输出格式
对于每个询问指令 Q1 a b,如果 a和 b在同一个连通块中,则输出 Yes,否则输出 No。

对于每个询问指令 Q2 a,输出一个整数表示点 a所在连通块中点的数量

每个结果占一行。

思路 在find的基础上加一个s数组,存储以find[i]为祖宗的集合的所有数字的个数

# include<iostream>using namespace std;int p[100010];
int s[100010];int find(int x){if(p[x]!=x) p[x] = find(p[x]);return p[x];
}int main(){int n,m;cin>>n>>m;int i=0;for(i=1; i<=n;i++){p[i] = i;s[i] = 1;}while(m--){string str;int a,b;cin>>str>>a;if(str[0]=='C'){cin>>b;if(find(a)==find(b)) continue;s[find(b)]+= s[find(a)];p[find(a)] = find(b);}else if(str[1]=='1'){cin>>b;if(find(a)!=find(b)){cout<<"No"<<endl;}else{cout<<"Yes"<<endl;}}else{cout<<s[find(a)]<<endl;}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/732898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Paimon 使用之 Querying Tables

Querying Tables 1.Batch Query Paimon的批量读取返回表快照中的所有数据。默认情况下&#xff0c;批处理读取返回最新的快照。 -- Flink SQL SET execution.runtime-mode batch;2.Batch Time Travel Paimon批量读取指定快照或标签的数据。 Flink 动态配置 -- read the …

鸿蒙开发(二)-项目结构

鸿蒙开发(二)-项目结构 上篇文章我们讲了如何配置鸿蒙开发的基础环境&#xff0c;以及创建了第一个鸿蒙程序。 这篇我们讲述了鸿蒙应用的项目目录结构。 如图所示&#xff1a;我们切换项目project可以看到。 另一种则是Ohos模式: AppScope->app.json5 应用的全局配置 {&q…

300分钟吃透分布式缓存-26讲:如何大幅成倍提升Redis处理性能?

主线程 Redis 自问世以来&#xff0c;广受好评&#xff0c;应用广泛。但相比&#xff0c; Memcached 单实例压测 TPS 可以高达百万&#xff0c;线上可以稳定跑 20~40 万而言&#xff0c;Redis 的单实例压测 TPS 不过 10~12 万&#xff0c;线上一般最高也就 2~4 万&#xff0c;…

【算法沉淀】最长回文子串

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

element-ui 中 upload组件 如何传递额外的参数 ?

参考elementui 文档 如何通过data 进行额外传递参数&#xff1f;(:data"uploadData") <el-uploadref"fileUploadBtn1"class"upload-demo"accept".xls,.xlsx" :limit"1" :action"uploadFileUrl" :on-success&q…

MongoDB聚合运算符;$dateToParts

$dateToParts聚合运算符将日期表达式拆分成多个字段放在一个文档返回&#xff0c;属性有year、month、day、hour、minute、second和millisecond。如果iso8601属性设置为true&#xff0c;返回的各部分用ISO周日期返回&#xff0c;属性分别是&#xff1a;isoWeekYear、isoWeek、i…

jvm堆概述

《java虚拟机规范》中对java堆的描述是&#xff1a;所有的对象实例以及数组都应当在运行时分配在堆上。 一个JVM实例只存在一个堆内存(就是new 出来一个对象)&#xff0c;java内存管理的核心区域 java堆区在jvm启动的时候就被创建&#xff0c;空间大小确定。是jvm管理的最大一…

通过Step Back提示增强LLM的推理能力

原文地址&#xff1a;enhancing-llms-reasoning-with-step-back-prompting 论文地址&#xff1a;https://arxiv.org/pdf/2310.06117.pdf 2023 年 11 月 6 日 Introduction 在大型语言模型不断发展的领域中&#xff0c;一个持续的挑战是它们处理复杂任务的能力&#xff0c;这…

图形库实战丨C语言扫雷小游戏(超2w字,附图片素材)

目录 效果展示 游玩链接&#xff08;无需安装图形库及VS&#xff09; 开发环境及准备 1.VS2022版本 2.图形库 游戏初始化 1.头文件 2.创建窗口 3.主函数框架 开始界面函数 1.初始化 1-1.设置背景颜色及字体 1-2.处理背景音乐及图片素材 1-3.处理背景图位置 2.选…

【操作系统学习笔记】文件管理2.1

【操作系统学习笔记】文件管理2.1 参考书籍: 王道考研 视频地址: Bilibili 文件系统的层次结构 用户/应用程序用户接口: 文件系统需要向上层的用户提供一些简单易用的功能接口。这层就是用于处理用户发出的系统调用请求文件目录系统: 用户是通过文件路径来访问文件的&#x…

在职场上,如何提升影响力

在职场上提升影响力是一个持续且多方面的过程&#xff0c;涉及个人技能、人际关系、领导能力以及个人品牌的建立等多个方面。以下是一些建议&#xff0c;帮助你提升在职场上的影响力&#xff1a; 提升专业技能&#xff1a; 深入学习和掌握所在领域的专业知识&#xff0c;保持对…

Linux服务器安装jdk

背景: 安装JDK是我们java程序在服务器运行的必要条件,下面描述几个简单的命令就可再服务器上成功安装jdk 命令总览: yum update -y yum list | grep jdk yum -y install java-1.8.0-openjdk java -version 1.查看可安装版本 yum list | grep jdk 2.如果查不到可先进行 yum upd…

leetcode 热题 100_缺失的第一个正数

题解一&#xff1a; 正负模拟哈希&#xff1a;偏技巧类的题目&#xff0c;在无法使用额外空间的情况下&#xff0c;只能在原数组中做出类似哈希表的模拟。除去数值&#xff0c;我们还可以用正负来表示下标值的出现情况。首先&#xff0c;数组中存在正负数和0&#xff0c;而负数…

猫头虎分享已解决Bug || 数据中心断电:PowerLoss, DataCenterBlackout

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

通过Annotation将用户操作记录到数据库表功能实现

一、背景 在用户对我们所开发的系统访问的时候&#xff0c;需要我们的系统具有强大的健壮性&#xff0c;使得给与用户的体验感十足。在业务开发的过程中&#xff0c;我们通过将几个相关的操作绑定成一个事件&#xff0c;使得安全性以及数据的前后一致性得到提高。但是在溯源方面…

未来城市:探索数字孪生在智慧城市中的实际应用与价值

目录 一、引言 二、数字孪生与智慧城市的融合 三、数字孪生在智慧城市中的实际应用 1、智慧交通管理 2、智慧能源管理 3、智慧建筑管理 4、智慧城市管理 四、数字孪生在智慧城市中的价值 五、挑战与展望 六、结论 一、引言 随着科技的飞速发展&#xff0c;智慧城市已…

RLAIF在提升大型语言模型训练中的应用

RLAIF在提升大型语言模型训练中的应用 大型语言模型&#xff08;LLMs&#xff09;在理解和生成自然语言方面展示了巨大能力&#xff0c;但仍面临输出不可靠、推理能力有限、缺乏一致性个性或价值观对齐等挑战。为解决这些问题&#xff0c;研究者开发了一种名为“来自AI反馈的强…

C++模板基础知识

文章目录 模板模板的声明与定义函数模板非类型模板参数类模板类的成员函数定义构造函数的定义类的静态成员的定义类模板的实例化使用模板类型中的类型成员 默认模板参数指定显示模板实参(函数模板显示实参)引用折叠和右值引用参数可变参数模板对参数包的扩展对参数包的转发可变…

linux 日志轮转

前言: 在Linux系统中&#xff0c;日志轮转是一种重要的管理机制&#xff0c;它可以帮助管理日志文件的大小、数量以及保持系统的性能稳定。通过日志轮转&#xff0c;可以定期对日志文件进行归档、压缩或清理&#xff0c;确保系统的日志记录不会无限增长而占用过多的磁盘空间…

动态SLAM论文阅读笔记

近期阅读了许多动态SLAM相关的论文&#xff0c;它们基本都是基于ORB-SLAM算法&#xff0c;下面简单记录一下它们的主要特点&#xff1a; 1.DynaSLAM 采用CNN网络进行分割多视图几何辅助的方式来判断动态点&#xff0c;并进行了背景修复工作。 2.Detect-SLAM 实时性问题&…