【并查集】专题练习

news2025/1/20 1:33:54

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

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

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

相关文章

数据结构:希尔排序

文章目录 前言一、排序的概念及其运用二、常见排序算法的实现 1.插入排序2.希尔排序总结 前言 排序在生活中有许多实际的运用。以下是一些例子&#xff1a; 购物清单&#xff1a;当我们去超市购物时&#xff0c;通常会列出一份购物清单。将购物清单按照需要购买的顺序排序&…

【前端】Mac安装node14教程

在macOS上安装Node.js版本14.x的步骤如下&#xff1a; 打开终端。 使用Node Version Manager (nvm)安装Node.js。如果你还没有安装nvm&#xff0c;可以使用以下命令安装&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 然后关…

安通控股CRM数字化一阶段成功上线,重塑企业客户关系管理新格局

在数字化浪潮的席卷下&#xff0c;企业数字化转型已成为不可逆转的趋势&#xff0c;由于内循环增加、数字化转型、流量成本获客趋高等趋势作用力下&#xff0c;企业的精益化管理以围绕客户为中心构建市场竞争力的重要性日益凸显。 随着“客户为中心”理念的愈加深入&#xff0…

NFT Insider #132:Solana链上NFT销售总额达到55.49亿美元, The Sandbox成立DAO

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members&#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、…

docker基本操作命令(3)

目录 1.Docker服务管理命令&#xff1a; 启动&#xff1a;systemctl start docker 停止&#xff1a;systemctl stop docker 重启&#xff1a;systemctl restart docker 开机自启&#xff1a;systemctl enable docker 查看docker版本&#xff1a; 2.镜像常用管理命令&…

k8s的ci/cd实践之旅

书接上回k8s集群搭建完毕&#xff0c;来使用它强大的扩缩容能力帮我们进行应用的持续集成和持续部署&#xff0c;整体的机器规划如下&#xff1a; 1.192.168.8.156 搭建gitlab私服 docker pull gitlab/gitlab-ce:latest docker run --detach --hostname 192.168.8.156 --publ…

数据挖掘 | 实验三 决策树分类算法

文章目录 一、目的与要求二、实验设备与环境、数据三、实验内容四、实验小结 一、目的与要求 1&#xff09;熟悉决策树的原理&#xff1b; 2&#xff09;熟练使用sklearn库中相关决策树分类算法、预测方法&#xff1b; 3&#xff09;熟悉pydotplus、 GraphViz等库中决策树模型…

【运维项目经历|026】Redis智能集群构建与性能优化工程

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

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…

buuctf的RSA(五)

[RoarCTF2019]RSA 一看到题目&#xff0c;我就有些蒙了&#xff0c;A是代表了什么&#xff0c; 先来分解n 接下来可以暴力破解e了&#xff0c;因为e没有给出来&#xff0c;应该不会太大&#xff0c;猜测是四位数字 import gmpy2 import libnum from Crypto.Util.number import…

2024就业寒潮下的挑战与机遇:能否守住饭碗,人工智能能否成为新春天?

前言 随着时代的飞速发展&#xff0c;2024年的就业市场迎来了前所未有的挑战。数以百万计的高校毕业生涌入市场&#xff0c;使得就业竞争愈发激烈。然而&#xff0c;在这股就业寒潮中&#xff0c;我们也看到了新的曙光——人工智能的崛起。这一新兴行业以其独特的魅力和巨大的…

【每日刷题】Day52

【每日刷题】Day52 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 2965. 找出缺失和重复的数字 - 力扣&#xff08;LeetCode&#xff09; 2. 350. 两个数组的交集 II …

【LeetCode】38.外观数列

外观数列 题目描述&#xff1a; 「外观数列」是一个数位字符串序列&#xff0c;由递归公式定义&#xff1a; countAndSay(1) "1"countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。 行程长度编码&#xff08;RLE&#xff09;是一种字符串压缩方法&#xff0c…

【评价类模型】熵权法

1.客观赋权法&#xff1a; 熵权法是一种客观求权重的方法&#xff0c;所有客观求权重的模型中都要有以下几步&#xff1a; 1.正向化处理&#xff1a; 极小型指标&#xff1a;取值越小越好的指标&#xff0c;例如错误率、缺陷率等。 中间项指标&#xff1a;取值在某个范围内较…

【QEMU中文文档】1.关于QEMU

本文由 AI 翻译&#xff08;ChatGPT-4&#xff09;完成&#xff0c;并由作者进行人工校对。如有任何问题或建议&#xff0c;欢迎联系我。联系方式&#xff1a;jelin-shoutlook.com。 QEMU 是一款通用的开源机器仿真器和虚拟化器。 QEMU 可以通过几种不同的方式使用。最常见的用…

Linux上传文件

在finalshell中连接的Linux系统中&#xff0c;输入命令rz然后选择windows中的文件即可。

多维数组操作,不要再用遍历循环foreach了!来试试数组展平的小妙招!array.flat()用法与array.flatMap() 用法及二者差异详解

目录 一、array.flat&#xff08;&#xff09;方法 1.1、array.flat&#xff08;&#xff09;的语法及使用 ①语法 ②返回值 ③用途 二、array.flatMap() 方法 2.1、array.flatMap()的语法及作用 ①语法 ②返回值 ③用途 三、array.flat&#xff08;&#xff09;与a…

Nature 审稿人:值得关注的里程碑!段路明研究组首次实现基于数百离子量子比特的量子模拟计算

2024年5月30日&#xff0c;清华大学最新科研成果发表于Nature&#xff08;自然&#xff09;&#xff0c;这项成果被Nature审稿人称为“量子模拟领域的巨大进步”“值得关注的里程碑”&#xff01;究竟是什么样的成果值得这样的赞誉呢&#xff1f; 该成果就是中国科学院院士、清…

vue3 前端实现导出下载pdf文件

这样的数据实现导出 yourArrayBufferOrByteArray 就是后端返回数据 // 创建Blob对象const blob new Blob([new Uint8Array(res)], { type: application/pdf })// 创建一个表示该Blob的URLconst url URL.createObjectURL(blob);// 创建一个a标签用于下载const a document.cr…

Vulnhub项目:Thales:1

1、靶机地址 靶机地址&#xff1a;Thales: 1 ~ VulnHub 这个靶机在做的时候有两种思路&#xff0c;下面进行详细渗透过程。 2、渗透过程 来来来&#xff0c;搞起&#xff01;目标56.162&#xff0c;本机56.160 探测&#xff0c;探测&#xff0c;22&#xff0c;8080&#xf…