2024蓝桥杯每日一题(并查集)

备战2024年蓝桥杯 -- 每日一题
Python大学A组

        试题一:奶酪
        试题二:合并集合
        试题三:连通块中点的数量
        试题四:网络分析


试题一:奶酪

【题目描述】

        现有一块大奶酪,它的高度为 hℎ,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系,在坐标系中,奶酪的下表面为 z=0,奶酪的上表面为 z=h。 现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐标如果两个空洞相切或是相交,则 Jerry 可以从其中一个空洞跑到另一个空洞,特别地,如果一个空洞与下表面相切或是相交,Jerry 则可以从奶酪下表面跑进空洞;如果一个空洞与上表面相切或是相交,Jerry 则可以从空洞跑到奶酪上表面。

        位于奶酪下表面的 Jerry 想知道,在不破坏奶酪的情况下,能否利用已有的空洞跑到奶酪的上表面去? 

        空间内两点 P1(x1,y1,z1)、P2(x2,y2,z2)的距离公式如下:

【输入格式】

        每个输入文件包含多组数据。  

        输入文件的第一行,包含一个正整数 T,代表该输入文件中所含的数据组数。  

        接下来是 T 组数据,每组数据的格式如下:

        第一行包含三个正整数 n,h,ℎ 和 r,两个数之间以一个空格分开,分别代表奶酪中空洞的数量,奶酪的高度和空洞的半径。  

        接下来的 n 行,每行包含三个整数 x、y、z,两个数之间以一个空格分开,表示空洞球心坐标为 (x,y,z)。

【输出格式】

        输出文件包含 T行,分别对应 T组数据的答案,如果在第 i 组数据中,Jerry 能从下表面跑到上表面,则输出 Yes,如果不能,则输出 No

【数据范围】

        1≤n≤1000,
        1≤h,r≤10⁹,
        T≤20,

【输入样例】

3 
2 4 1 
0 0 1 
0 0 3 
2 5 1 
0 0 1 
0 0 4 
2 5 2 
0 0 2 
2 0 4

【输出样例】

Yes
No
Yes

【解题思路】

        首先找到所有的与底面和顶面相交或相切的点,然后两层循环遍历,如果两个球相交或相切也就是两个求联通,则合并一下。处理完成后,枚举每一个与地面相交或相切的点与顶点,如果二者有相同的父节点说明上下联通。

【Python程序代码】

from collections import *
T = int(input())
def find(x):if p[x]!=x:p[x] = find(p[x])return p[x]def dist(x1,y1,z1,x2,y2,z2):return ( (x2-x1)**2 + (y2-y1)**2 + (z2-z1)**2 )**0.5
for _ in range(T):n,h,r = map(int,input().split())p = [i for i in range(n+5)]a = [[0,0,0]]s1,s2 = [0],[0]for i in range(n):x,y,z = map(int,input().split())a.append([x,y,z])if z-r<=0:s1.append(i+1)if z+r>=h:s2.append(i+1)if not len(s1) or not len(s2):print('No')continuefor i in range(1,n+1):for j in range(i+1,n+1):if find(i)==find(j):continued = dist(a[i][0],a[i][1],a[i][2],a[j][0],a[j][1],a[j][2])if d<=2*r:p[ find(i) ] = find(j)f = 0for i in range(1,len(s1)):if f:breakfor j in range(1,len(s2)):if find( s1[i] ) == find(s2[j]):f=1; print('Yes')breakif not f:print('No')

试题二:合并集合

【题目描述】

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

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

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

【输入格式】

        第一行输入整数 n 和 m。

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

【输出格式】

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

        每个结果占一行。

【数据范围】

        1≤n,m≤105

【输入样例】

4 5
M 1 2
M 3 4
Q 1 2
Q 1 3
Q 3 4

【输出样例】

Yes
No
Yes

【解题思路】

        模板题,不过Python好像过不了?

【Python程序代码】

import sys
imput = sys.stdin.readline
n,m = map(int,input().split())
p = [i for i in range(n+5)]
def find(x):if p[x]!=x:p[x] = find(p[x])return p[x]
for i in range(m):s = list(input().split())a,b = int(s[1]),int(s[2])if s[0]=='M':if find(a)==find(b):continueelse: p[find(a)]=find(b)else:if find(a)==find(b):print('Yes')else: print('No')

试题三:连通块中点的数量

【题目描述】

        给定一个包含 n 个点(编号为 1∼n)的无向图,初始时图中没有边。现在要进行 m 个操作,操作共有三种:

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

【输入格式】

        第一行输入整数 n 和 m 。

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

【输出格式】

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

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

        每个结果占一行。

【数据范围】

        1≤n,m≤10⁵

【输入样例】

5 5
C 1 2
Q1 1 2
Q2 1
C 2 5
Q2 5

【输出样例】

Yes
2
3

【解题思路】

        在原来并查集的合并基础上加上一个点的数量合并就ok。

【Python程序代码】

n,m = map(int,input().split())
p = [i for i in range(n+5)]
size1 = [1 for i in range(n+5)]
def find(x):if p[x]!=x:p[x]=find(p[x])return p[x]
def merge(a,b):x,y = find(a),find(b)p[x] = ysize1[y] += size1[x]
for i in range(m):s = list(input().split())if s[0]=='C':if s[1]==s[2]:continueif find(int(s[1])) == find( int(s[2]) ):continuemerge(int(s[1]),int(s[2]))if s[0]=='Q1':if find(int(s[1])) == find( int(s[2]) ):print('Yes')else:print('No')if s[0]=='Q2':print( size1[find( int(s[1]) )] )

试题四:网络分析

【题目描述】

        小明正在做一个网络实验。他设置了 n 台电脑,称为节点,用于收发和存储数据。初始时,所有节点都是独立的,不存在任何连接。小明可以通过网线将两个节点连接起来,连接后两个节点就可以互相通信了。两个节点如果存在网线连接,称为相邻。小明有时会测试当时的网络,他会在某个节点发送一条信息,信息会发送到每个相邻的节点,之后这些节点又会转发到自己相邻的节点,直到所有直接或间接相邻的节点都收到了信息。所有发送和接收的节点都会将信息存储下来。一条信息只存储一次。给出小明连接和测试的过程,请计算出每个节点存储信息的大小。

【输入格式】

        输入的第一行包含两个整数 n,m,分别表示节点数量和操作数量。节点从 1 至 n 编号。接下来 m 行,每行三个整数,表示一个操作。

  • 如果操作为 1 a b,表示将节点 a 和节点 b 通过网线连接起来。当 a = b 时,表示连接了一个自环,对网络没有实质影响。
  • 如果操作为 2 p t,表示在节点 p 上发送一条大小为 t 的信息。

【输出格式】

        输出一行,包含 n 个整数,相邻整数之间用一个空格分割,依次表示进行完上述操作后节点 1 至节点 n 上存储信息的大小。

【数据范围】

        1≤n≤10000,
        1≤m≤105,
        1≤t≤100

【输入样例】

4 8
1 1 2
2 1 10
2 3 5
1 4 1
2 2 2
1 1 2
1 2 4
2 2 1

【输出样例】

13 13 5 3

【解题思路】

        思考并查集的树是如何构造出来的,当没有进行路径压缩时,这个点的信息量可以考虑成该点到对应父节点路径上结点的信息量之和,那么两个集合合并时该如何维护结点信息量呢?如果p[a]=b也就是a结点指向b结点,那么对应的d[a] -= d[b]即可。

【Python程序代码】

n,m = map(int,input().split())
p = [i for i in range(n+5)]
size1 = [1 for i in range(n+5)]
def find(x):if p[x]!=x:p[x]=find(p[x])return p[x]
def merge(a,b):x,y = find(a),find(b)p[x] = ysize1[y] += size1[x]
for i in range(m):s = list(input().split())if s[0]=='C':if s[1]==s[2]:continueif find(int(s[1])) == find( int(s[2]) ):continuemerge(int(s[1]),int(s[2]))if s[0]=='Q1':if find(int(s[1])) == find( int(s[2]) ):print('Yes')else:print('No')if s[0]=='Q2':print( size1[find( int(s[1]) )] )

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

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

相关文章

shell source脚本中如何读取另外一个脚本中的变量

目录 前言语法举例注意 前言 要在一个Shell脚本中读取另一个Shell脚本中的变量&#xff0c;可以使用source命令或者.命令。这些命令用于在当前Shell环境中运行指定的脚本&#xff0c;从而使得脚本中的变量在当前Shell中可用。 语法 #!/bin/bash # 读取另一个Shell脚本中的变…

金智维的务实主义,打响大模型落地“突围战”

今年以来&#xff0c;新质生产力成为全社会关注的焦点。新质生产力的特征之一&#xff0c;就是深化新技术应用&#xff0c;尤其是AI及大模型&#xff0c;要加速落地到实际业务场景中&#xff0c;为千行万业提质增效。 2024是大模型技术做深、价值做实的一年。3月20日&#xff0…

【C++】详解智能指针

目录 一、智能指针的作用二、内存泄露1、什么是内存泄露2、内存泄漏分类3、如何避免内存泄露 三、智能指针的使用及原理1、RAII2、智能指针的原理3、std::auto_ptr4、std::unique_ptr5、std::shared_ptr1、std::shared_ptr原理2、std::shared_ptr的线程安全问题4、std::shared_…

python爬虫学习第二天----类型转换

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

电脑如何录视频?进阶教程来了!

随着科技的飞速发展&#xff0c;视频录制已成为我们日常生活和工作中不可或缺的一部分。无论是进行在线教育、制作教学视频&#xff0c;还是记录游戏过程、直播分享&#xff0c;录屏都扮演着至关重要的角色。可是您知道电脑如何录视频吗&#xff1f;本文将介绍两种电脑录视频的…

稀碎从零算法笔记Day23-LeetCode:二叉树的最大深度

题型&#xff1a;链表、二叉树的遍历 链接&#xff1a;104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上…

vue2从基础到高级学习笔记

在实际的工作中,我常使用vue的用法去实现效果,但是你要是问我为什么这样写,它的原理是啥就答不上来了。对vue的认知一直停留在表面,写这篇文章主要是为了理清并弄透彻vue的原理。 学习目标 1 学会一些基本用法的原理 2 弄懂vue核心设计原理 3 掌握vue高级api的用法 一 vue…

环境安装篇 之 安装kubevela

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 环境安装 系列文章&#xff0c;介绍 oam规范标准实施项目 kubevela 的安装详细步骤kubevela 官方安装文档&#xff1a;https://kubevela.io/zh/docs/installation/kubernetes/ 1.CentOS 安装kubevela 1.1.前提…

电脑数据安全新篇章:备份文件,守护您的珍贵数据

备份文件&#xff0c;无疑是电脑使用中不可或缺的重要一环。在数字化时代&#xff0c;我们的工作、学习和生活都离不开电脑&#xff0c;而电脑中的数据更是我们宝贵的财富。一旦数据丢失或损坏&#xff0c;可能会带来无法估量的损失。因此&#xff0c;备份文件的重要性不言而喻…

Vue.js+SpringBoot开发高校宿舍调配管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统展示四、核心代码4.1 查询单条个人习惯4.2 查询我的室友4.3 查询宿舍4.4 查询指定性别全部宿舍4.5 初次分配宿舍 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的…

力扣hot100:4. 寻找两个正序数组的中位数(归并排序/二分/双指针)

目录 一、暴力排序 二、归并排序 三、双指针 四、二分查找 如果本题不说明时间复杂度应该为O(log(mn)&#xff0c;那么本题应该是一个简单题&#xff0c;解决的方法有很多。这里先列举出普通方法&#xff0c;再来讨论二分。 一、暴力排序 不管啦&#xff0c;直接纯暴力&…

黑白照片怎么变彩色?3个实用上色方法分享

黑白照片怎么变彩色&#xff1f;这是一个让许多人感到好奇和期待的问题。随着科技的发展&#xff0c;现在已经有多种软件可以将黑白照片转变为彩色&#xff0c;让历史的回忆重新焕发出生机。这些软件利用先进的算法和图像处理技术&#xff0c;能够精准地还原出照片中的色彩&…

【前端】卡片渐变色阴影效果 旋转动画

【前端】卡片渐变色阴影效果 旋转动画 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Breathing…

【G3D笔记】AI生成式3D算法相关环境安装爬坑笔记

【G3D笔记】AI生成式3D算法相关环境安装爬坑笔记) 1、 RayMarching1.1 error C1189: #error: You need C++17 to compile PyTorch1.2 raymarching安装环境版本测试1.3 host_config.h(231): fatal error C1083: 无法打开包括文件: “crtdefs.h”2、Tiny-Cuda-nn2.1 HTTP/2 stre…

mysql体系结构及主要文件

目录 1.mysql体系结构 2.数据库与数据库实例 3.物理存储结构​编辑 4.mysql主要文件 4.1数据库配置文件 4.2错误日志 4.3表结构定义文件 4.4慢查询日志 4.4.1慢查询相关参数 4.4.2慢查询参数默认值 4.4.3my.cnf中设置慢查询参数 4.4.4slow_query_log参数 4.4.…

opengl日记10-opengl使用多个纹理示例

文章目录 环境代码CMakeLists.txt文件内容不变。fragmentShaderSource.fsvertexShaderSource.vsmain.cpp 总结 环境 系统&#xff1a;ubuntu20.04opengl版本&#xff1a;4.6glfw版本&#xff1a;3.3glad版本&#xff1a;4.6cmake版本&#xff1a;3.16.3gcc版本&#xff1a;10.…

设计模式之工厂方法模式解析

工厂方法模式 1&#xff09;问题 简单工厂模式 当需要引入新产品时&#xff0c;由于静态工厂方法通过所传入参数的不同来创建不同的产品&#xff0c;需要修改工厂类的源代码。 2&#xff09;概述 针对不同的产品提供不同的工厂&#xff0c;系统提供一个与产品等级结构对应…

我的保研材料全部损坏了!这个压缩包文件格式未知或数据已经被损坏不可预料的压缩文件末端

求助各位友友&#xff0c;我的保研材料全部没了&#xff01; 之前为了清理D盘&#xff0c;把之前保研期间准备的几个G的材料全部压缩放在了U盘&#xff0c;但是现在却损坏打不开了&#xff0c;之前为了省事也没有添加过“恢复记录”&#xff01;&#xff01;&#xff01; 先声…

阿赵UE学习笔记——20、角色蓝图和动画蓝图

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。这次来看看角色控制动画相关的东西&#xff0c;主要用到了动画蓝图和角色蓝图。 一、动画蓝图 之前分析过&#xff0c;蓝图对于虚幻引擎来说&#xff0c;是存在于各个系统里面的&#xff0c;相当…

智慧公厕:卫生、便捷、安全的新时代厕所变革

在城市快速发展的背景下&#xff0c;公共厕所的建设和管理变得越来越重要。智慧公厕作为厕所变革的一项全新举措&#xff0c;通过建立公共厕所全面感知监测系统&#xff0c;以物联网、互联网、大数据、云计算、自动化控制技术为支撑&#xff0c;实现对公共厕所的智能化管理和运…