《洛谷深入浅出基础篇》P1551亲戚——集合——并查集P1551亲戚

上链接:P1551 亲戚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1551

上题干: 

题目背景

若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。

题目描述

规定:x 和 y 是亲戚,y 和 z 是亲戚,那么 x 和 z 也是亲戚。如果x,y 是亲戚,那么 �x 的亲戚都是 y 的亲戚,y 的亲戚也都是 x 的亲戚。

输入格式

第一行:三个整数 n,m,p,(n,m,p≤5000),分别表示有 n 个人,m 个亲戚关系,询问 p 对亲戚关系。

以下 m 行:每行两个数 Mi​,Mj​,1≤Mi​, Mj​≤n,表示 Mi​ 和 Mj​ 具有亲戚关系。

接下来 p 行:每行两个数 Pi​,Pj​,询问 Pi​ 和 Pj​ 是否具有亲戚关系。

输出格式

p 行,每行一个 Yes 或 No。表示第 i 个询问的答案为“具有”或“不具有”亲戚关系。

输入输出样例

输入 #1复制

6 5 3
1 2
1 5
3 4
5 2
1 3
1 4
2 3
5 6

输出 #1复制

Yes
Yes
No

 我们拿样例来模拟一下:

一共有6给予5个亲戚关系进行3次查找
亲戚关系:12
15
34
52
13
查询是否具有亲戚关系14
23
56

由于题目说了,如果x,y是亲戚,那么x的亲戚就是y的亲戚,y的亲戚就是x的亲戚

所以我们把互相为亲戚的人放入一个集合中

当我们需要查询任意两个人是否为亲戚关系的时候,我们就可以查询这两个人是否在同一个集合中

那么如何判断这两个人是否在一个集合之中呢?

我们给这个集合创造一个特性,并且集合里面的人都满足这个特性,所以我们只需要判断要查询的人是否满足这种特性,就可以知道他们是不是在同一个集合里面。

这个特性就是祖先关系。

当一群人的祖先是同一个人的时候,这群人互相是亲戚。

首先,并查集的初始化:

将每个人初始化为自己家族的祖先:(我是我爹)

fa[i]=i;、

合并:

然后我们会循环输入亲戚关系

比如样例中的,先输入 1   2 , 代表这两个人是亲戚

所以我们需要将 1 , 2 的家族合并,使得他们的祖先为同一个人,可以为1,也可以为2.

fa[fa[1]]=fa[2];

代表将家族1的祖先 并入家族2中当族人

第二次输入  1  5  

我们操作的目的是:代表将家族1的祖先 并入家族5中当族人

而家族1的祖先是2,说明2是家族5中的族人,说明,1,2被并入5了。

即:

fa[fa[1]] = fa[5]

第三次输入  3  4

同理,将家族3的祖先并入家族4中当族人

fa[fa[3]]=fa[4]

第四次输入  5 2

我们发现家族5的祖先是5,家族2的祖先是2,所以不需要合并

第五次输入:1,3

将家族1的祖先并入家族3

fa[fa[1]]=fa[3]

即将5并入家族3当族人

那么模拟完了之后,我们可以得到如下的关系

家族a1,2,3,4,5(加粗的为祖先)
家族b6

进行完这些操作之后,我们创建完了一个并查集,就可以查询元素是否属于某个集合了。

上代码:

const int N = 5e3 + 10;
int fa[N];
int find1(int x)
{
	if (fa[x]==x)return fa[x]; //如果家族x的祖先是x,返回祖先
	else return fa[x] = find1(fa[x]);//如果不是,查找 (家族x的祖先)(假设是家族y)是不是其家族(家族y)的祖先
}//不断递归,最终返回的是 x 的祖先
void join1(int c1, int c2)
{
	int f1 = find1(c1), f2 = find1(c2);//找到c1,c2的祖先f1,f2
	if (f1 != f2)fa[f1] = f2;//如果不是同一个人,那么将家族f1并入家族f2
}
int main()
{
	int n, m, p;
	cin >> n >> m >> p;
	for (int i = 1; i <= n; i++)fa[i] = i;//初始化父节点
	for (int i = 1; i <= m; i++)
	{
		int x, y;
		cin >> x >> y;
		join1(x, y);
	}
	for (int i = 1; i <= p; i++)
	{
		int x, y;
		cin >> x >> y;
		find1(x) == find1(y) ? cout << "Yes" << endl : cout << "No"<<endl;
	}
}

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

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

相关文章

用Postman发送xml数据

启动Postman&#xff1a; 点击左上角的“New”&#xff0c;在弹出窗中选择HTTP&#xff1a; 选择POST方法&#xff1a; 点击Body&#xff1a; 选择raw&#xff1a; 在右侧的下拉列表中选择XML&#xff1a; 在下面的输入框中输入或者从其它地方拷贝XML文本&#xff1a;…

软件测试之接口测试面试题

1、接口的定义 系统与系统之间、组件与组件之间、数据传递交换的通道 2、接口的类型 按协议&#xff1a;http、tcp、ip 按语言&#xff1a;C、java、php 按范围&#xff1a;系统与系统、内部系统与内部系统、外部系统与外部系统之间 程序划分&#xff1a;多个内部程序、内…

QML20、布局

1.概述 首先,QML同样允许大家使用硬编码的方式将位置数值直接写到代码中,但是这样做首先难以适应UI的调整,其次代码维护起来也很困难。因此不推荐这样做。推荐大家使用的是以下三种布局管理器:Row,、Column、Grid、Flow,以及使用Anchor进行布局。 2.Row QML 中的 Row 元素…

js-webApi笔记1

目录 前言 Web API的概念 什么是DOM DOM树 1、查找元素 2、其他查找元素方法 3、操作元素 4、操作元素属性 5、 操作元素样式 style 6、操作自定义属性 7、 操作表单元素属性 8、事件 9、事件绑定 10、常用鼠标事件 11、定时器 12、定时器案例 前言 Web API的概念…

最长上升子序列模型 笔记

首先附上模板&#xff1a; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll;const int N 100010;int n; int a[N], q[N];int main()…

Linux脚本shell中将Windos格式字符转换为unix

众所周知&#xff0c;windos的文档直接复制到linux服务器上去&#xff0c;是需要进行格式转换的&#xff0c;否则可能出现以下报错&#xff1a; 解决方法&#xff1a; vim 脚本 输入 :set ff ##会显示字符格式 :set ffunix ##转换为unix格式 :wq ##保存退出

Word添加附件(附件图标被挡住的问题)

本文主要是为了记录一下自己使用word添加附件的时候遇到的一个坑&#xff0c;就是添加了附件&#xff0c;附件图标没有展示的问题。 选择 插入——对象&#xff0c;然后点击由文件创建然后再点击浏览本地电脑中的文件&#xff0c;选择需要添加的文件&#xff0c;当然也可以选择…

2019年五一杯数学建模B题木板最优切割方案解题全过程文档及程序

2019年五一杯数学建模 B题 木板最优切割方案 原题再现 徐州某家具厂新进一批木板如表 1 所示&#xff0c;在家具加工的过程中&#xff0c;需要使用切割工具生产表 2所示的产品。假设&#xff1a;木板厚度和割缝宽度忽略不计。   请为该家具厂给出如下问题的木板最优切割方…

解决k8s通过traefik暴露域名失败并报错:Connection Refused的问题

我敢说本篇文章是网上为数不多的解决traefik暴露域名失败问题的正确文章。 我看了网上太多讲述traefik夸夸其谈的文章了&#xff0c;包含一大堆复制粘贴的水文和还有什么所谓“阿里技术专家”的文章&#xff0c;讲的全都是错的&#xff01;基本没有一个能说到点子上去&#xf…

如何在3DMax中使用超过16个材质ID通道?

3DMAX效果通道扩展插件EffectsChannelEx教程 3DMax的材质ID通道允许我们生成渲染元素&#xff0c;这些元素可用于在合成或其他软件中产生处理或特殊效果。如对渲染或动画进行颜色校正。你可以在Photoshop中为你的静态3D渲染图像做这件事。或者使用After Effects、Blackmagic Fu…

【MySQL】表的增删改查(进阶)

一、数据库约束 1.1 约束类型 &#x1f693;NOT NULL - 指示某列不能存储 NULL 值。 &#x1f693;UNIQUE - 保证某列的每行必须有唯一的值。 &#x1f693;DEFAULT - 规定没有给列赋值时的默认值。 &#x1f693;PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列&…

阿里云2核2G3M带宽服务器,新老用户同价99元/年!续费不涨价!

作为双11服务器中备受用户关注的一款&#xff0c;轻量服务器2核2G3M带宽优惠价87元一年的价格令人惊喜。不仅价格实惠&#xff0c;而且配置也十分出色。2核2G的配置足够应对一般网站和轻量级应用的需求&#xff0c;同时3M的带宽也能够保障数据的快速传输。对于个人网站、小型企…

如何设计短域名系统

输入可能是 一个冗长的域名&#xff0c;过期时间和自定义的别名输出 自定义别名或者随机生成的短域名&#xff0c;在过期时间到来之前访问都可以被重定向到冗长的域名上约束条件 1.过期后就失效 2.短域名是唯一的 3.自定义短域名长度在7个字符&#xff08;不包含域名长度&am…

代码随想录算法训练营第五十五天丨 动态规划part16

583. 两个字符串的删除操作 思路 #动态规划一 本题和动态规划&#xff1a;115.不同的子序列 (opens new window)相比&#xff0c;其实就是两个字符串都可以删除了&#xff0c;情况虽说复杂一些&#xff0c;但整体思路是不变的。 这次是两个字符串可以相互删了&#xff0c;这…

中国又一家手机企业赶超苹果,逼得苹果降价抢占3000元市场

今年第44周的数据显示&#xff0c;苹果再次失去了中国手机市场第一名&#xff0c;这对于苹果希望iPhone15热销带动销量的目标受挫&#xff0c;难怪苹果在双十一竭尽全力降价抢占市场了。 苹果的iPhone15上市确实带动了一波销售&#xff0c;不过仅仅维持了两周&#xff0c;随后1…

“具有分布式能源资源的多个智能家庭的能源管理的联邦强化学习”文章学习二

一、准备工作 本篇文章所使用的缩写总结如下表。 Markov决策过程&#xff08;MDP&#xff09;被定义为元组&#xff08;S&#xff0c;A&#xff0c;P&#xff0c;R&#xff0c;T&#xff09;&#xff0c;其中S和A是有限的有效状态集和所有有效动作的有限集。函数P : SA→ P(S)是…

Java排序算法之归并排序

图解 归并排序是一种效率比较高的分治排序算法&#xff0c;主要分为两个步骤&#xff0c;分别为“分”和“并”。 分&#xff1a;将序列不断二分&#xff0c;直到每个子序列只有一个元素为止。 并&#xff1a;将相邻两个子序列进行合并&#xff0c;合并时比较两个子序列的元素…

BUUCTF 被劫持的神秘礼物 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 某天小明收到了一件很特别的礼物&#xff0c;有奇怪的后缀&#xff0c;奇怪的名字和格式。小明找到了知心姐姐度娘&#xff0c;度娘好像知道这是啥&#xff0c;但是度娘也不知道里面是啥。。。你帮帮小明&#xff1…

工作中积累的对K8s的就绪和存活探针的一些认识

首先&#xff0c;我的项目是基于 Spring Boot 2.3.5 的&#xff0c;并依赖 spring-boot-starter-actuator 提供的 endpoints 来实现就绪和存活探针&#xff0c;POM 文件如下图&#xff1a; 下面&#xff0c;再让我们来看下与该项目对应的Deployment的YAML文件&#xff0c;如下…

2023最新最全【虚幻4引擎】下载安装零基础教程

1、创建Epic Games账户 我们先打开浏览器&#xff0c;输入以下网址&#xff1a;unrealengine.com 随后点击【立即开始】 选择许可证类型&#xff0c;此处提供三种选项&#xff0c;分别是【游戏】、【非游戏】以及【私人定制】 第一类许可证适用于游戏和商业互动产品&#xff…