AcWing 528. 奶酪 (并查集)

记录此题主要是明确两点:

  • 强制转long long的时候只会影响乘法,如果是加法的话就要在每个乘的前面都加上long long,否则无法达到要求。
  • 在使用并查集来做连通问题时,可以设出两个不影响其他数据的点来代表想要连通的两个地方

现有一块大奶酪,它的高度为 h h h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞。

我们可以在这块奶酪中建立空间坐标系,在坐标系中,奶酪的下表面为 z = 0 z=0 z=0,奶酪的上表面为 z = h z=h z=h

现在,奶酪的下表面有一只小老鼠 J e r r y Jerry Jerry,它知道奶酪中所有空洞的球心所在的坐标。

如果两个空洞相切或是相交,则 J e r r y Jerry Jerry 可以从其中一个空洞跑到另一个空洞,特别地,如果一个空洞与下表面相切或是相交, J e r r y Jerry Jerry 则可以从奶酪下表面跑进空洞;如果一个空洞与上表面相切或是相交, J e r r y Jerry Jerry 则可以从空洞跑到奶酪上表面。

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

空间内两点 P 1 ( x 1 , y 1 , z 1 ) P_1(x_1,y_1,z_1) P1(x1,y1,z1) P 2 ( x 2 , y 2 , z 2 ) P_2(x_2,y_2,z_2) P2(x2,y2,z2) 的距离公式如下:

$dist(P_1,P_2)$ $=$ $\sqrt{(x_1−x_2)^2+(y_1−y_2)^2+(z_1−z_2)^2}$

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

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

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

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

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

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

数据范围
1 ≤ n ≤ 1000 , 1≤n≤1000, 1n1000,
1 ≤ h , r ≤ 1 0 9 , 1≤h,r≤10^9, 1h,r109,
T ≤ 20 , T≤20, T20,
坐标的绝对值不超过 1 0 9 10^9 109

输入样例:

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

思路:建立并查集,判断两个球心相差小于等于 2 r 2r 2r 的情况下合并两个集合,并且底部用 0 0 0 表示,顶部用 n + 1 n+1 n+1 表示,最后查询是否有find(0) == find(n+1),如果有就是连通了。

唯一需要特别注意的一点: 判断一个洞是否和底部或是顶部相连时,应该将洞看作一个球体,即看球心与顶部或底部是否相差了小于等于 r r r 的距离,而不是看 z z z 的坐标是否为 0 0 0 或是 h h h

代码:

#include<iostream>
using namespace std;
const int N = 1010;
#define acc ios::sync_with_stdio(false);cin.tie(0);int p[N];
struct Node {int x, y, z;
}a[N];
int n, h, r;int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}bool check(int i, int j) {long long d1 = a[i].x - a[j].x;	//这里要开long long,不然就在后面乘的时候每个前面都加long longlong long d2 = a[i].y - a[j].y;	long long d3 = a[i].z - a[j].z;if (d1 * d1 + d2 * d2 + d3 * d3 <= (long long)r * r * 4)return 1;else return 0;
}int main() {accint t; cin >> t;while (t--) {cin >> n >> h >> r;for (int i = 0; i <= n + 1; i++) p[i] = i;	//初始化并查集for (int i = 1; i <= n; i++) {cin >> a[i].x >> a[i].y >> a[i].z;if (abs(a[i].z) <= r) p[find(i)] = find(0);		//如果这个洞连上了底部if (h - a[i].z <= r) p[find(i)] = find(n + 1);	//如果这个洞连上了顶部}for (int i = 1; i <= n; i++) {for (int j = i + 1; j <= n; j++) {if (check(i, j)) {p[find(i)] = find(j);}}}if (find(0) == find(n + 1))cout << "Yes" << endl;else cout << "No" << endl;}return 0;
}

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

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

相关文章

STM32 AD单通道函数设计

单片机学习&#xff01; 目录 文章目录 前言 一、ADC配置步骤 二、详细步骤 2.1 开启RCC时钟 2.2 配置GPIO 2.3 配置多路开关 2.4 配置ADC转换器 2.5 开启ADC电源 2.6 ADC进行校准 2.6.1 复位校准 2.6.2 等待复位校准完成 2.6.3 开始校准 2.6.4 等待校准完成 三、启动AD转换函数…

zookeeper 总结

1.zookeepr 节点的唯一性。 ZooKeeper中节点的唯一性是通过节点路径和节点数据构成的唯一标识来实现的。当创建节点时&#xff0c;如果提供的路径已经存在&#xff0c;则创建操作会失败&#xff0c;除非请求包含了Ephemeral类型的节点特有的可选字段SEQUENTIAL或EPHEMERAL。 …

STM32不使用中断实现定时器微秒级精确延时

我们在写代码的时候避免不了要使用延时函数&#xff0c;很多延时函数都是使用中断或者tick来实现的&#xff0c;tick的方式最大到毫秒ms级别&#xff0c;通过中断方式的通用定时器来实现&#xff0c;如果实现1us的延时那么每1us就来一次中断&#xff0c;很影响cpu的效率。 本文…

程序员表白

啥&#xff1f;&#xff01;你说程序员老实&#xff0c;认真工作&#xff0c;根本不会什么表白&#xff01;那你就错了&#xff01;(除了我) 那今天我们就来讲一下这几个代码&#xff01;赶紧复制下来&#xff0c;这些代码肯定有你有用的时候&#xff01; 1.Python爱心代码 im…

Google XSS Game Level 6 通关方式

文章目录 链接&#xff1a;[Google XSS Game](#https://xss-game.appspot.com/)Level 6 - Follow the &#x1f407;思路1 &#xff08;当然&#xff0c;我使用这个方式没有成功&#xff0c;所以才来记录下&#xff09;解法2 【最简单的解法】需要注意的一个小问题 链接&#x…

单相桥式全控整流电路

1仿真目的 通过对单相桥式全控整流电路的仿真研究&#xff0c;分析电路带电阻负载与阻感负载的不同工作情况。研究对电路的影响 2仿真原理 2.1单相桥式 如图所示为单相桥式全控电路的框图&#xff0c;设负载为电阻负载。在桥式逆变电路中&#xff0c;桥臂的上下两个开关器件…

RabbitMQ在Java中使用 SpringBoot 从基础到高级

充分利用每一个监听者 需要充分利用每一个消费者&#xff0c;需要在配置文件中加上prefetch配置并设置为1 rabbitmq:listener:simple:prefetch: 1 # 每次只能获取一条消息&#xff0c;处理完成才能获取下一个消息创建交换机和队列 创建队列 "fanout.queue1"&…

超融合服务器:企业转型的助推器?

在当今快速发展的数字化时代&#xff0c;企业需要灵活、高效且可靠的IT基础设施来支撑其业务运营。传统的存储环境由于其复杂性和局限性&#xff0c;已经难以满足现代企业的需求。而超融合设备的出现&#xff0c;为企业提供了一个全新的选择。本文将深入探讨超融合服务器的优势…

C++一维数组练习oj(2)

这时上次的C一维数组练习&#xff1a;C一维数组练习oj-CSDN博客 这到题目我承认非常难&#xff01;当然这只是我认为&#xff0c;因为我只学到了一维数组&#xff01; 对于你们来说可能不难。 好了我不客套了。 这题我们可以将他理解为一条时间轴&#xff1a; 时间轴上小李每1…

【Linux 08】进程概念

文章目录 &#x1f308; 01. 基本概念&#x1f308; 02. 描述进程 PCB&#x1f308; 03. 使用 ./ 的方式创建进程&#x1f308; 04. ps 查看进程&#x1f308; 05. getpid / getppid 获取进程标识符&#x1f308; 06. kill 终止指定进程&#x1f308; 07. fork 创建子进程&…

tftp使用

下载 sudo apt-get install tftpd-hpa 创建文件夹 mkdir /home/ljl/work/tftpd mkdir /home/ljl/tftpd chmod 777 tftpd/编辑 sudo vim /etc/default/tftpd-hpa //服务器端 sudo apt-get install tftp-hpa //客户端编辑权限 sudo vi /etc/default/tftpd-hpa 内容&#xff1…

1. 列表补全

while 1:try:offset,n,l1,l2 map(int,input().split())start1 end1 start2 end2 0if offset>l1: # 有被跳过的页start1 end1 l1if offset>l1l2: # 第二页是否被跳过start2 end2 l2else: # 第二页被展示的部分start2,end2 offset-l1…

SQL Server 2008R2 日志文件大小设置及查询

SQL Server 2008R2 建立数据库存在日志无限增长问题&#xff0c;造成磁盘内存不足。本文解决这个问题&#xff0c;如下&#xff1a; 1.设置日志文件的最大大小 USE master; GO ALTER DATABASE [D_total] MODIFY FILE (NAME D_total_log, -- 日志文件的逻辑名称MAXSIZE 200…

【黄啊码】如何用GPT和向量数据库做问答型AI

知识库服务依赖该数据库&#xff0c;Embedding 形式个性化训练 ChatGPT&#xff0c;必不可少的就是向量数据库 因为 qdrant 向量数据库只支持 Docker 部署&#xff0c;所以需要先安装好 Docker 服务。 命令行安装 拉取镜像 docker pull qdrant/qdrant 运行服务 docker run -…

飞桨AI应用@riscv OpenKylin

在riscv编译安装飞桨PaddlePaddle参见&#xff1a; 算能RISC-V通用云编译飞桨paddlepaddleopenKylin留档_在riscv下进行paddlelite源码编译-CSDN博客 安装好飞桨&#xff0c;就可以用飞桨进行推理了。刚开始计划用ONNX推理&#xff0c;但是在算能云没有装上&#xff0c;所以最…

【正点原子Linux连载】第十七章 异步通知实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第十七…

C 经典面试题15例

1.引用与指针有什么区别? 答 、1) 引用必须被初始化&#xff0c;指针不必。 2) 引用初始化以后不能被改变&#xff0c;指针可以改变所指的对象。 3) 不存在指向空值的引用&#xff0c;但是存在指向空值的指针。 2. 描述实时系统的基本特性 答 、在特定时间内完成特定的任…

2024年华为OD机试真题-石头剪刀布游戏-Python-OD统一考试(C卷)

题目描述: 石头剪刀布游戏有3种出拳形状:石头、剪刀、布。 分别用字母 A,B,C表示。 游戏规则: 1)出拳形状之间的胜负规则如下:A> B;B> C;C> A “>” 左边一个字母,表示相对优势形状。 右边一个字母,表示相对劣势形状。 2) 当本场次中有且仅有一种出拳形状…

Java发送请求-get源码

发送请求 配置依赖-pom.xml Welcome! - The Apache HTTP Server Project 官网解释这个源码httpClient是执行httpget和httppost 步骤&#xff1a; 查看httpClient源码&#xff0c;源码和方法都没有有用的解释 查看CloseableHttpClient源码类 这个抽象类实现2个接口&#xf…

使用conda创建python 虚拟环境

在cmd命令窗口&#xff0c;输入conda activate激活虚拟环境&#xff0c;可以看到默认为base&#xff0c;下面来介绍如何使用conda来创建python虚拟环境&#xff0c;因为在不同的工程中&#xff0c;对python等有不同版本需求&#xff0c;容易出现冲突。 1. 安装conda &#xff…