【并查集】专题练习

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

模板

836. 合并集合 - AcWing题库

#include<bits/stdc++.h>
using ll=long long;
//#define int ll
const int N=1e5+10,mod=1e9+7;
int n,m;
int p[N],sz[N];
int find(int a)
{if(p[a]!=a) p[a]=find(p[a]);return p[a];
}
void merge(int a,int b)
{int pa=find(a),pb=find(b);if(pa!=pb){p[pa]=pb;sz[pb]+=sz[pa];}
}
void que(int a,int b){if(find(a)==find(b)) std::cout<<"Yes"<<'\n';else std::cout<<"No"<<'\n';
}
void solve()
{std::cin>>n>>m;for(int i=1;i<=n;i++){sz[i]=1;p[i]=i;}while(m--){char op;int a,b;std::cin>>op>>a>>b;if(op=='M'){merge(a,b);}else{que(a,b);}}}
signed main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);int t=1;//std::cin>>t;while(t--){solve();}return 0;
}

 837. 连通块中点的数量 - AcWing题库

#include<bits/stdc++.h>
const int N=1e5+10;
int p[N];
int size[N];
int find(int x)
{if(x!=p[x]){p[x]=find(p[x]);}return p[x];
}
void merge(int a,int b)
{int pa=find(a),pb=find(b);if(pa!=pb){p[pa]=pb;size[pb]+=size[pa];}
}
void query(int a,int b)
{int pa=find(a),pb=find(b);if(pa==pb){std::cout<<"Yes"<<'\n';}else std::cout<<"No"<<'\n';
}
void solve()
{int n,m;std::cin>>n>>m;for(int i=1;i<=n;i++){p[i]=i;size[i]=1;}while(m--){char op[5];std::cin>>op;int a,b;if(op[0]=='C') {std::cin>>a>>b;merge(a,b);}else if(op[1]=='1'){std::cin>>a>>b;query(a,b);}else{std::cin>>a;//询问a中连通块点的个数std::cout<<size[find(a)]<<'\n';}}
}
signed main()
{int t=1;//std::cin>>t;while(t--){solve();}return 0;
}

 240. 食物链 - AcWing题库

普及-

(合并集合)(P2256 一中校运会之百米跑 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

判断点是否在一个集合中。 

#include<bits/stdc++.h>using ll=long long;
using ull=unsigned long long;#define fir first
#define sec second
#define int llconst int N=2e4+10;
const int mod=1e9+7;
const double eps=1e-6;
int n,m;
int p[N],sz[N];
ll find(int a)
{if(p[a]!=a) p[a]=find(p[a]);return p[a];
}
void merge(int a,int b)
{int pa=find(a),pb=find(b);if(pa!=pb){p[pa]=pb;sz[pb]+=sz[pa];}
}
bool que(int a,int b)
{if(find(a)==find(b)) return true;else return false;
}
void solve()
{std::cin>>n>>m;std::map<std::string,int> mp;for(int i=1;i<=n;i++){std::string s;std::cin>>s;mp[s]=i;p[i]=i,sz[i]=1; }	for(int i=1;i<=m;i++){std::string a,b;std::cin>>a>>b;merge(mp[a],mp[b]);}int k;std::cin>>k;while(k--){std::string a,b;std::cin>>a>>b;if(que(mp[a],mp[b])) std::cout<<"Yes.\n";else std::cout<<"No.\n";}
}
signed main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);int t=1;//std::cin>>t;while(t--){solve();}return 0;
}

(合并集合)P8396 [CCC2022 S2] Good Groups - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

还是个模板题 

#include<bits/stdc++.h>
using ll=long long;
using ull=unsigned long long;
#define fir first
#define sec second
//#define int llconst int N=1e5+10;
const int mod=1e9+7;int n;
ll ans;
struct node{std::string s1,s2; 
}a[N];
struct nod{std::string s1,s2; 
}b[N];
std::unordered_map<std::string,std::string> p;std::string find(std::string& s)
{if(p[s]!=s) p[s]=find(p[s]);return p[s];
}
void merge(std::string& a,std::string& b)
{std::string pa=find(a),pb=find(b);if(pa!=pb){p[pa]=pb;}
}
bool que(std::string& a,std::string& b)
{if(find(a)!=find(b)) return false;else return true;
}
void solve()
{int x;//每个组3个人std::cin>>x;
//	getchar();for(int i=1;i<=x;i++){//getchar();std::cin>>a[i].s1>>a[i].s2;}int y;std::cin>>y; for(int i=1;i<=y;i++){//getchar();std::cin>>b[i].s1>>b[i].s2;}int g;std::cin>>g;for(int i=1;i<=g;i++){std::string a,b,c;//getchar();std::cin>>a>>b>>c;if(p.count(a)==0) p[a]=a;if(p.count(b)==0) p[b]=b;if(p.count(c)==0) p[c]=c;merge(a,b);merge(c,b);}ll ans=0;for(int i=1;i<=x;i++){if(!que(a[i].s1,a[i].s2)) ans++; }for(int i=1;i<=y;i++){if(que(b[i].s1,b[i].s2)) ans++; }std::cout<<ans<<'\n';
}
signed main()
{//freopen("a","w",stdout);//把结果输出到a.in里面 std::ios::sync_with_stdio(false);std::cin.tie(0);int t=1;//std::cin>>t;while(t--){solve();}return 0;
}

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

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

相关文章

第十八讲:联合和枚举

第十八讲&#xff1a;联合和枚举 1.联合体&#xff08;共用体&#xff09;1.1联合体的声明1.2联合体大小的计算1.3联合体的特点1.4联合体的使用1.4.1联合体的直接使用1.4.2联合体直接使用的优化方法1.4.3联合体成员中含有数组的使用1.4.4使用联合体判断当前机器是大端排序&…

K8s(Kubernetes)常用命令

大家好&#xff0c;当谈及容器编排工具时&#xff0c;Kubernetes&#xff08;常简称为K8s&#xff09;无疑是当今最受欢迎和广泛使用的解决方案之一。作为一个开源的容器编排平台&#xff0c;Kubernetes 提供了丰富的功能&#xff0c;可以帮助开发人员和运维团队管理、部署和扩…

电商分析@电商数据与运营优化

电商数据分析与运营优化是指通过对电商平台的各种数据进行深入分析&#xff0c;以发现潜在的问题和机会&#xff0c;并采取相应的优化措施&#xff0c;提高电商运营效率和盈利能力。 首先&#xff0c;电商数据分析需要收集和整理各类数据&#xff0c;包括销售数据、用户数据、流…

大宋咨询(深圳车主满意度调查)如何开展汽车展会观众满意度问卷调查

汽车展览是由政府机构、专业协会或主流媒体等组织,在专业展馆或会场中心进行的汽车产品展示展销会或汽车行业经贸交易会、博览会等活动。汽车展览通过对汽车工艺的呈现与汽车产品的广告,为消费者提供汽车制造工业与汽车产品的发展动向。同时,汽车厂商可通过汽车展览对外宣传产品…

实战16:基于apriori关联挖掘FP-growth算法挖掘关联规则的手机销售分析-代码+数据

直接看视频演示: 基于apriori关联挖掘关联规则的手机销售分析与优化策略 直接看结果: 这是数据展示: 挖掘结果展示: 数据分析展示:

利用WK2168实现串口服务器

ESP32 SPI与WK2168实现串口服务器 概述系统组成代码概述 一些老设备通过RS485采集数据,如果在一个系统中采用几个RS485设备可能是一个不错的选择,但要是使用46个RS485数据采集设备为一个PLC提供外部数据,系统的性能就很难有保障了。通过一个串口服务器实现看来是一个好的选…

智慧校园有哪些特征

随着科技的飞速进步&#xff0c;教育领域正经历着一场深刻的变革。智慧校园&#xff0c;作为这场变革的前沿代表&#xff0c;正在逐步重塑我们的教育理念和实践方式。它不仅仅是一个概念&#xff0c;而是一个集成了物联网、大数据、人工智能等先进技术的综合生态系统&#xff0…

SpringBoot源码(自动装配、内嵌Tomcat)

文章目录 依赖管理pom依赖管理Web依赖自定义starter 一、WebMvcAutoConfiguration1.1 Filter1.2 Interceptor 二、源码解析2.1 SpringApplication2.1.1 构造方法1、填充webApplicationType2、自动装配Initializers3、自动装配Listeners 2.1.2 run(args) 2.2 SpringApplicationR…

手写Mitt实现事件订阅、发布和取消订阅

Mitt类设计 emitter属性&#xff1a;用于存储事件和对应的处理器 on方法&#xff1a;订阅事件 off方法&#xff1a;取消订阅事件 emit方法&#xff1a;触发事件 export class Mitt<T> {private readonly emitter: Record<string, Array<(value: T[keyof T]) …

AI边缘计算盒子在智慧交通的应用

方案背景 随着经济增长&#xff0c;交通出行需求大幅增长&#xff0c;但道路建设增长缓慢&#xff0c;交通供需矛盾日益显著&#xff0c;中心城区主要道路高峰时段交通拥堵严重&#xff0c;道路交通拥堵逐渐常态化&#xff0c;成为制约城市可持续发展的重要因素之一。 痛点问题…

web 前端开发技术---网页的制作

这是一个网页代码 上年包含了电子邮件&#xff0c;选项建 等等 分享给大家 <!-- prj_7_1.html --> <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title>留言板设计</title><style type&…

【C++】入门(一):命名空间、缺省参数、函数重载

目录 一、关键字 二、命名空间 问题引入(问题代码)&#xff1a; 域的问题 1.::域作用限定符 的 用法&#xff1a; 2.域的分类 3.编译器的搜索原则 命名空间的定义 命名空间的使用 举个&#x1f330;栗子&#xff1a; 1.作用域限定符指定命名空间名称 2. using 引入…

【数据结构与算法 | 堆篇】JAVA实现小顶堆

1. 堆的特点 堆的逻辑结构是数组&#xff0c;内存结构是完全二叉树.完全二叉树即只有最后一层才有叶子节点.堆又分为大顶堆与小顶堆. 大顶堆的特点是 : 父亲节点比孩子节点的都要大. 小顶堆的特点与其相反.Java的优先级队列(PriorityQueue)的底层实现即用到了小顶堆. 所以下文…

K210视觉识别模块学习笔记3:内存卡写入拍摄图片_LED三色灯的操作_按键操作_定时器的配置使用

今日开始学习K210视觉识别模块: LED三色灯的操作_按键操作_定时器的配置使用_内存卡写入拍摄图片 亚博智能的K210视觉识别模块...... 本文最终目的是编写一个按键拍照的例程序&#xff1a; 为以后的专用场景的模型训练做准备&#xff0c;因为训练自己的模型需要大量的图片&a…

jmeter基础入门练习题

jmeter存在A,B两个线程组的情况下&#xff0c;默认设置下&#xff0c;运行顺序是&#xff1a;A A&#xff1a;A,B同时运行 B&#xff1a;先运行A&#xff0c;在运行B C&#xff1a;先运行A&#xff0c;等待2s运行B D:先A运行完&#xff0c;等待默认设置时间后运行B 下列说法正…

编译安装PHP服务(LAMP3)

目录 1.初始化设置&#xff0c;将安装PHP所需软件包传到/opt目录下 &#xff08;1&#xff09;关闭防火墙 &#xff08;2&#xff09;上传软件包到/opt目录 2.安装GD库和GD库关联程序&#xff0c;用来处理和生成图片 3.配置软件模块 4.编译及安装 5.优化把PHP 的可执行程…

nginx的安装001

Nginx是一款高性能的HTTP和反向代理服务器&#xff0c;以及邮件代理服务器&#xff0c;由 Igor Sysoev 开发并公开发布于2004年。Nginx以其高并发处理能力、低内存消耗和稳定性著称&#xff0c;特别适合部署在高流量的网站上。 操作系统&#xff1a; CentOS Stream 9 安装步骤…

【算法训练 day44 分割等和子集】

目录 一、分割等和子集-LeetCode 416思路实现代码1.二维dp代码2.一维dp代码 问题总结 一、分割等和子集-LeetCode 416 Leecode链接: leetcode 416 文章链接: 代码随想录 视频链接: B站 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&…

SQL入门教程,很详细

SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系数据库的标准语言。它被广泛用于存储、操作和检索数据。在这篇文章中&#xff0c;我们将介绍SQL的基本概念和常用命令。 首先&#xff0c;我们需要了解SQL的基本结构。SQL语句通常由以下几个部分组成&…

头歌数据结构与算法课程设计易-算式运算的合法性

给定一个算式运算&#xff0c;算式由运算数、、-、、/、(、)组成&#xff0c;请编写程序判断该算式运算是否合法。如果合法&#xff0c;计算该算式的值。 输入描述&#xff1a; 第一行输入一个运算表达式 输出描述&#xff1a; 如果表达式合法则计算其值&#xff0c;结果保留两…