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')
        continue
    for i in range(1,n+1):
        for j in range(i+1,n+1):
            if find(i)==find(j):continue
            d = 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 = 0
    for i in range(1,len(s1)):
        if f:break
        for j in range(1,len(s2)):
            if find( s1[i] ) == find(s2[j]):
                f=1; print('Yes')
                break
    if 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):continue
        else: 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] = y
    size1[y] += size1[x]
for i in range(m):
    s = list(input().split())
    if s[0]=='C':
        if s[1]==s[2]:continue
        if find(int(s[1])) == find( int(s[2]) ):continue
        merge(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] = y
    size1[y] += size1[x]
for i in range(m):
    s = list(input().split())
    if s[0]=='C':
        if s[1]==s[2]:continue
        if find(int(s[1])) == find( int(s[2]) ):continue
        merge(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]) )] )

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

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

相关文章

PyTorch 深度学习(GPT 重译)(六)

十四、端到端结节分析&#xff0c;以及接下来的步骤 本章内容包括 连接分割和分类模型 为新任务微调网络 将直方图和其他指标类型添加到 TensorBoard 从过拟合到泛化 在过去的几章中&#xff0c;我们已经构建了许多对我们的项目至关重要的系统。我们开始加载数据&#xf…

【遥感入门系列】遥感图像预处理需要哪些步骤

图像预处理是遥感应用的第一步&#xff0c;也是非常重要的一步。目前的技术也非常成熟&#xff0c;大多数的商业化软件都具备这方面的功能。预处理的流程在各个行业、不同数据中有点差异&#xff0c;而且注重点也各有不同。 本小节包括以下内容&#xff1a; 数据预处理一般流…

纵览机器学习前生今世,万字整理谷歌首席科学家 Jeff Dean 一小时演讲

经过算法的改进和机器学习专用硬件的显著提升&#xff0c;我们现在能够构建比以往任何时候都更为强大的通用机器学习系统。 演讲者 | Jeff Dean 整理 | 王启隆 自从 2017 年谷歌发表了题为 “Attention is All You Need” 的重磅论文&#xff0c;其中提出的“自注意力”这一革命…

软考高级:结构化需求分析概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

力扣15. 三数之和

思路&#xff1a;先对数组排序&#xff0c;然后确定第一个数nums[i]&#xff0c;再新建左右双指针&#xff1b; 寻找的3元组&#xff0c;a,b,c,即是 nums[i], nums[letf], nums[right] 数组1&#xff1a;-1,-1,-1,0,1,2; 前面3个-1&#xff0c;只有一个-1是有用的&#xff0c;需…

从键盘到屏幕:C语言中输入输出探秘

在编程中&#xff0c;输入和输出是我们与计算机交流的关键。无论是键盘输入还是屏幕输出&#xff0c;它们贯穿了我们每一行代码的编写。本文将带你深入探索C语言中输入输出的精彩世界&#xff0c;解锁其中的奥秘&#xff0c;助你轻松驾驭键盘和屏幕&#xff01;&#xff08;最后…

模型部署 - onnx的导出和分析 - onnx 的架构和 onnx helper 的使用 - 学习记录

onnx 的架构和 onnx helper 的使用 简介一、onnx 的架构二、onnx 实践2.1、 create - linear.onnx2.1.1、要点一&#xff1a;创建节点2.1.2、要点二&#xff1a;创建张量2.1.3、要点三&#xff1a;创建图 2.2、 create - onnx.convnet2.3、使用 onnx helper 导出的基本流程总结…

Docker-镜像仓库

Docker ⛅Docker-Registry&#x1f320;分类&#x1f320;镜像仓库工作机制&#x1f320;常用的镜像仓库&#x1f320;镜像仓库命令☃️docker login☃️docker pull☃️docker push☃️docker search☃️docker logout &#x1f320;镜像命令[部分]☃️docker images☃️docke…

电源配小了,是不是容易烧?是的!

电源小的话会不会容易烧毁&#xff1f; 是的。 功率电压*电流。 随着功率增大&#xff0c;电压不变&#xff0c;电流增大&#xff0c;发热量增大&#xff0c;可能会烧毁。 今天给大家推荐一款650w的电脑电源&#xff0c;不过在推荐之前&#xff0c;首先要确认自己的电脑功耗…

【Internet结构和ISP,分组延时、丢失和吞吐量】

文章目录 一、Internet结构和ISP1.互联网络结构&#xff1a;网络的网络2.Internet 结构&#xff1a;network of networks 二、分组延时、丢失和吞吐量1.分组丢失和延时是怎样发生的&#xff1f;2.四种分组延时3.分组丢失4.吞吐量 一、Internet结构和ISP 1.互联网络结构&#x…

流畅的 Python 第二版(GPT 重译)(十二)

第五部分&#xff1a;元编程 第二十二章&#xff1a;动态属性和属性 属性的关键重要性在于&#xff0c;它们的存在使得将公共数据属性作为类的公共接口的一部分完全安全且确实可取。 Martelli、Ravenscroft 和 Holden&#xff0c;“为什么属性很重要” 在 Python 中&#xff0…

鲁棒的基于表面势的GaN HEMT集成电路紧凑模型

来源&#xff1a;Robust Surface-Potential-Based Compact Model forGaN HEMT IC Design&#xff08;TED 13年&#xff09; 摘要 我们提出了一种精确且稳健的基于表面势的紧凑模型&#xff0c;用于模拟采用氮化镓高电子迁移率晶体管&#xff08;GaN HEMT&#xff09;设计的电…

利用 Claude 3 on Amazon Bedrock 和 Streamlit 的“终极组合”,开发智能对话体验

概述 通过本文&#xff0c;您将学会如何利用 Streamlit 框架快速搭建前端交互界面。该界面将集成图像上传功能&#xff0c;让用户可以方便地提交待处理图片。在后端&#xff0c;我们将借助 Amazon Bedrock 的 Message API&#xff0c;调用 Claude 3 家族中的 Sonnet 模型对图像…

java系统部署到Linux

1、安装java 1.8JDK 卸载Open JDK 首先&#xff0c;我们先检查系统是否自带了 JDK。输入命令 java -verison批量删除 rpm -qa | grep java | xargs rpm -e --nodeps下载并安装JDK 我们在 user 目录下建立一个新的 java文件夹&#xff0c;用来存放 JDK文件。 jdk下载地址 …

上位机图像处理和嵌入式模块部署(qmacvisual拟合直线)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 测量是图像处理的一个基本技能。那么测量的前提&#xff0c;就是我们需要在图像中找出特定的集合图形&#xff0c;比如说直线。当然&#xff0c;发…

lsn和redo

瀚高数据库 目录 文档用途 详细信息 相关文档 记录lsn三种记录形式&#xff0c;以及redo对lsn的操作。 详细信息 一、lsn的三种形式 1. pg_controldata中可以看到这样的lsn表示&#xff1a; Latest checkpoint location: 0/1548018Latest checkpoint’s REDO location: 0/…

智慧公园:AI智能分析网关V4城市公园视频智能监管方案

一、背景分析 随着天气渐渐转暖&#xff0c;城市公园的花卉也逐渐盛开&#xff0c;春暖花开时节&#xff0c;前往公园赏花游玩的城市居民也渐渐多起来&#xff0c;因此安全问题也成为相关监管部门的重要管理任务之一。随着科技的不断进步&#xff0c;智能监控技术已经成为现代…

Python将字符串转换为datetime

有这样一些字符串&#xff1a; 1710903685 20240320110125 2024-03-20 11:01:25 要转换成Python的datetime 代码如下&#xff1a; import functools import re from datetime import datetime, timedelta from typing import Union# pip install python-dateutil from date…

关于Rust的项目结构的笔记

层级 PackageCrateModulePath Package cargo的特性, 构建、测试、共享Crate 组成: 一个 Cargo.toml 文件, 描述了如何构建这些 Crates至少包含一个 crate最多只能包含一个 library crate可以包含任意个 binary crate cargo new demo-pro 会产生一个名为 demo-pro 的 Packa…

Python 深度学习第二版(GPT 重译)(一)

前言 序言 如果你拿起这本书&#xff0c;你可能已经意识到深度学习在最近对人工智能领域所代表的非凡进步。我们从几乎无法使用的计算机视觉和自然语言处理发展到了在你每天使用的产品中大规模部署的高性能系统。这一突然进步的后果几乎影响到了每一个行业。我们已经将深度学…