【并查集】专题练习

题目列表 - 洛谷 | 计算机科学教育新生态 (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 ll

const 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 ll

const 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++_list简单源码剖析:list模拟实现

文章目录 &#x1f680;1. ListNode模板&#x1f680;2. List_iterator模板(重要)&#x1f331;2.1 List_iterator的构造函数&#x1f331;2.2 List_iterator的关于ListNode的行为 &#x1f680;3. Reverse_list_iterator模板(拓展)&#x1f680;4. List模板(核心)&#x1f331…

更换固件后飞控OSD叠显不对/叠显不显示/叠显乱码问题

笔者用的飞控型号为SpeedyBeeF405V4的飞控&#xff0c;OSD叠显芯片型号为AT7456E。 我的这款飞控是支持两款固件的&#xff0c;INAV和BetaFlight。 开始飞控的默认固件为BetaFlight&#xff0c;切换INAV固件后&#xff0c;进行OSD调整&#xff0c;但发现水平线无法正常显示&…

分享一个 ASP.NET Web Api 上传和读取 Excel的方案

前言 许多业务场景下需要处理和分析大量的数据&#xff0c;而 Excel 是业务人员常用的数据表格工具&#xff0c;因此&#xff0c;将 Excel 表格中内容上传并读取到网站&#xff0c;是一个很常见的功能&#xff0c;目前有许多成熟的开源或者商业的第三方库&#xff0c;比如 NPO…

ROS2在RVIZ2中加载机器人urdf模型

参考ROS2-rviz2显示模型 我这边用的solid works生成的urdf以及meshes&#xff0c;比参考的方法多了meshes 问题一&#xff1a;Error retrieving file [package://rm_dcr_description/meshes/leftarm_link7.STL]: Package [rm_dcr_description] does not exist 这个是urdf模型中…

蓝桥杯单片机第五届国赛题目

前言&#xff1a;针对串口的练手&#xff0c;此处只作代码记录&#xff0c;不进行分析和展示 目录 题目代码底层驱动主程序核心代码 题目 代码 注&#xff1a;EEPROM的五组后丢弃用一个记录次数的变量进行循环即可&#xff0c;我没有写这一部分代码。 底层驱动 IIC unsign…

【Linux】Linux环境基础开发工具_3

文章目录 四、Linux环境基础开发工具2. vim3. gcc和g动静态库的理解 未完待续 四、Linux环境基础开发工具 2. vim vim 怎么批量化注释呢&#xff1f;最简单的方法就是在注释开头和结尾输入 /* 或 */ 。当然也可以使用快捷键&#xff1a; Ctrl v 按 hjkl 光标移动进行区域选择…

用HAL库改写江科大的stm32入门-6-3 PWM驱动LED呼吸灯

接线图&#xff1a; 2 :实验目的&#xff1a; 利用pwm实现呼吸灯。 关键PWM定时器设置&#xff1a; 代码部分&#xff1a; int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*…

JVM 常见配置参数

JVM 配置常见参数 Java虚拟机的参数&#xff0c;在启动jar包的时候通过java 命令指定JVM参数 -options表示Java虚拟机的启动参数&#xff0c;class为带有main()函数的Java类&#xff0c;args表示传递给主函数main()的参数。 一、系统查看参数: -XX:PrintVMOptions可以在程序…

ADC数模转换器

一、ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 1、ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 2、12位逐次逼近型ADC&#xff0c;1us转换时间 3、输入电压范围&#xff1a;0~3.3V&a…

Visual Studio 2022创建dll并调用

需求&#xff1a; 创建A项目&#xff0c;有函数和类&#xff0c;将A项目生成DLL动态链接库 创建B项目&#xff0c;使用A项目生成的dll和lib相关文件 正常项目开发.h用于函数声明&#xff0c;.cpp用于函数实现&#xff0c;但是项目开发往往不喜欢将.cpp函数实现的代码发给别人&…

只出现一次的数字II ---- 位运算

题目链接 题目: 分析: 对于只出现一次的数字, 他的任意一个bit位, 可能是0或1对于其余出现3次的数字, 假设有3n个数, 那么他们的任意一个bit相加的和可能是3n个0或3n个1那么对于数组中的全部数字的任意一个bit位之和共有三种情况: 3n个1 1 3n13n个0 1 13n个1 0 3n3n个0…

反VC情绪:加密市场需要新的分布式代币发行方式

GME事件 GME事件反应了社交媒体在金融决策中的影响力&#xff0c;散户投资者群体通过集体行动&#xff0c;改变了很多人对股市的看法和参与方式。 GME事件中&#xff0c;meme扮演了核心角色。散户投资者使用各种meme来沟通策略、激励持股行为&#xff0c;创造了一种反对华尔街…

2.5Bump Mapping 凹凸映射

一、Bump Mapping 介绍 我们想要在屏幕上绘制物体的细节&#xff0c;从尺度上讲&#xff0c;一个物体的细节分为&#xff1a;宏观、中观、微观宏观尺度中其特征会覆盖多个像素&#xff0c;中观尺度只覆盖几个像素&#xff0c;微观尺度的特征就会小于一个像素宏观尺度是由顶点或…

为何懂行的人都在选海信Mini LED?

今年的618大促比往年来得要更早一些。纵览各电商平台的电视产品&#xff0c;能发现Mini LED电视的出镜率很高&#xff0c;成了各大品牌的主推产品。 对于什么样的Mini LED更值得买&#xff0c;各品牌都有自己的说辞。因为缺乏科学系统的选购标准&#xff0c;消费者容易在各方说…

【VSCode】快捷方式log去掉分号

文章目录 一、引入二、解决办法 一、引入 我们使用 log 快速生成的 console.log() 都是带分号的 但是我们的编程习惯都是不带分号&#xff0c;每次自动生成后还需要手动删掉分号&#xff0c;太麻烦了&#xff01; 那有没有办法能够生成的时候就不带分号呢&#xff1f;自然是有…

国产身份域控在接管计算机登录时,要考虑哪些场景?

当客户提出需要宁盾来接管计算机做统一认证时&#xff0c;我们知道&#xff0c;他要的其实有辣么多&#xff1a; 一、多操作系统的统一登录 信创项目中&#xff0c;客户的计算机操作系统存在windows、Linux以及麒麟、统信等国产操作系统混合使用的情况&#xff0c;而员工想要的…

云动态摘要 2024-05-31

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [1.5折起]年中盛惠--AI分会场 腾讯云 2024-05-30 人脸核身、语音识别、文字识别、数智人、腾讯混元等热门AI产品特惠&#xff0c;1.5折起 云服务器ECS试用产品续用 阿里云 2024-04-14 云…

Zynq学习笔记--AXI4-Stream 图像数据从仿真输出到图像文件

目录 1. 简介 2. 构建工程 2.1 Vivado 工程 2.2 TestBench 代码 2.3 关键代码分析 3. VPG Background Pattern ID (0x0020) Register 4. 总结 1. 简介 使用 SystemVerilog 将 AXI4-Stream 图像数据从仿真输出到图像文件 (PPM)。 用到的函数包括 $fopen、$fwrite 和 $f…

dmdts连接kingbase8报错

dmdts连接kingbase报错 环境介绍1 人大金仓jdbc配置2 dmdts 人大金仓jdbc默认配置3 dmdts 修改jdbc配置4 达梦产品学习使用列表 环境介绍 dts版本 使用dmdts连接kingbase金仓数据库报错 无效的URL 对比jdbc连接串,修改配置解决 1 人大金仓jdbc配置 配置URL模版信息等 类名…

LabVIEW中PID控制器系统的噪声与扰动抑制策略

在LabVIEW中处理PID控制器系统中的噪声和外部扰动&#xff0c;需要从信号处理、控制算法优化、硬件滤波和系统设计四个角度入手。采用滤波技术、调节PID参数、增加前馈控制和实施硬件滤波器等方法&#xff0c;可以有效减少噪声和扰动对系统性能的影响&#xff0c;提高控制系统的…