Acwing528. 奶酪(并查集)

题目

现有一块大奶酪,它的高度为 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≤109,T≤20

坐标的绝对值不超过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

题解

import java.util.Scanner;

/**
 * @author akuya
 * @create 2024-03-25-21:37
 */
public class cheese {
    static int N=1010;
    static int n;
    static int h;
    static int r;
    static int p[]=new int[N];
    static xyz q[]=new xyz[N];

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int t=scanner.nextInt();
        while(t--!=0){
            n=scanner.nextInt();
            h=scanner.nextInt();
            r=scanner.nextInt();

            for(int i=0;i<=n+1;i++){
                p[i]=i;
            }

            for(int i=1;i<=n;i++){
                int x= scanner.nextInt();
                int y=scanner.nextInt();
                int z=scanner.nextInt();
                q[i]=new xyz(x,y,z);

                if(z-r<=0) p[find(i)]=find(0);
                if(z+r>=h) p[find(i)]=find(n+1);

            }

            for(int i=1;i<=n;i++){
                for(int j=i+1;j<=n;j++){
                    long tx= q[i].x-q[j].x;
                    long ty= q[i].y-q[j].y;
                    long tz= q[i].z-q[j].z;

                    if(tx*tx+ty*ty+tz*tz<=4*(long)r*r){
                        p[find(i)]=find(j);
                    }

                }
            }

            if(find(0)==find(n+1)){
                System.out.println("Yes");
            }else{
                System.out.println("No");
            }
        }
    }

    public static int find(int i){
        if(p[i]!=i) p[i]=find(p[i]);
        return p[i];
    }


}

class xyz{
    int x;
    int y;
    int z;

    public xyz(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
}



思路

这道题的实质是图的遍历问题,我们把每一个洞看做一个坐标点,两个洞连接说明两个点之间存在通路,使用图的遍历算法(BFS,DFS)或者使用并查集都可以解决这道题,并查集的代码量小,这里我们使用并查集,只需添加两个点,顶部和底部,最后查看顶部和底部是否在一个集合即可。

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

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

相关文章

成为创作者的第 730 天——创作纪念日

​​ 文章目录 &#x1f4e8; 官方致信&#x1f3af;我的第一篇文章&#x1f9e9; 机缘与成长 &#x1f3af; 成就&#x1f3af; 目标 &#x1f4e8; 官方致信 今天早上打开 CSDN 私信一看&#xff0c;看到了这一条消息&#xff0c;然后看了下日期。突然感慨到&#xff0c;是…

C语言笔记:预处理命令与结构体

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a;ACM金牌带你零基础直达C语言精通https://www.bilibili.com/cheese/play/ep159068?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说…

字符驱动程序-LCD驱动开发

一、驱动程序的框架 总共分为五步&#xff1a; 1、自己设定或者系统分配一个主设备号 2、创建一个file_operations结构体 这个结构体中有操作硬件的函数&#xff0c;比如drv_open、drv_read 3、写一个注册设备驱动函数 需要register_chrdev(major,name,结构体)&#xff0…

文件一键加水印的软件叫什么

答&#xff1a;文件一键加水印的软件叫“域智盾软件”。 域智盾作为一款专为企业内网信息安全保驾护航的领先软件&#xff0c;以其卓越的文件加密技术和自动添加水印功能为核心亮点&#xff0c;为企业提供了强大的数据安全保障和严谨的内部信息追踪机制。 【文件加密功能】 高…

C语言数据结构易错知识点(4)(二叉树、分治思想)

1.二叉树的特点&#xff1a;和顺序表、链表有所差异的是&#xff0c;二叉树并不主要用于存储数据&#xff0c;它多用于数据的筛选、处理等操作。二叉树内核是分治思想&#xff0c;对递归运用的要求很高&#xff0c;这在二叉树的各种接口的实现上我们都能有所体会。 2.最小子问…

Linux系统 安装docker

安装&#xff1a; 1、Docker要求CentOS系统的内核版本高于 3.10 &#xff0c;通过 uname -r 命令查看你当前的内核版本是否支持安账docker 2、更新yum包&#xff1a; sudo yum -y update 3、安装需要的软件包&#xff0c;yum-util 提供yum-config-manager功能&#xff0c;另外…

Excel双击单元格后弹窗输入日期

Step1. 在VBE界面新建一个窗体(Userform1),在窗体的工具箱的空白处右键,选中添加附件,勾选Calendar control 8.0,即可完成日历的添加。 PS:遗憾的是, Office 64 位没有官方的日期选择器控件。唯一的解决方案是使用Excel 的第三方日历。 参考链接:How to insert calen…

多图回顾|MoonBit 首场线下 MeetUp 回顾

3 月 23 日&#xff0c;MoonBit 首场线下 MeetUp 活动在深圳顺利举办。 在首场 MoonBit 线下 MeetUp 活动中&#xff0c;五位行业内的知名专家带来了四个以探索国产基础软件新发展为主题的精彩内容分享&#xff01; 一起来看看嘉宾们带来了哪些行业内的最新思考吧&#xff01; …

推荐一种Bean注入方式——开发经验

我们都知道三种Bean注入的方式分别是属性注入&#xff0c;setter方法注入&#xff0c;构造器注入。这三种Bean注入的方式各有优缺点&#xff0c;但是相对来说更推荐使用构造器注入的方式。 1、构造器注入的优缺点 优点&#xff1a; 1、可以注入不可变对象 因为构造方法注入是…

【MATLAB源码-第168期】基于matlab的布谷鸟优化算法(COA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 布谷鸟优化算法&#xff08;Cuckoo Optimization Algorithm, COA&#xff09;是一种启发式搜索算法&#xff0c;其设计灵感源自于布谷鸟的独特生活习性&#xff0c;尤其是它们的寄生繁殖行为。该算法通过模拟布谷鸟在自然界中…

Unity类银河恶魔城学习记录11-3 p105 Inventory UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_itemSlot.cs using System.Collections; using System.Collections.Gen…

马上入局:2024年阿里云服务器优惠价格,刷新你的认知!

2024年阿里云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

【第二部分--Python之基础】

一、初识 开发语言&#xff1a; 高级语言&#xff1a;Python Java PHP C# Go Ruby C ... > 字节码 低级语言&#xff1a;C 汇编 > 机器码 …

C++中atan和atan2

atan和atan2 两者都在cmath函数中。 atan std::atan(1. / 1.) * 180 / M_PI // 45 deg std::atan(-1. / -1.) * 180 / M_PI // 45 deg atan2 std::atan2(1., 1.) * 180 / M_PI // 45 std::atan2(-1., -1.) * 180 / M_PI // -135 区别 atan值域[-M_PI / 2., M_PI / 2.] a…

【Windows驱动篇】解决Windows驱动更新导致AMD Software软件无法正常启动问题

【Windows驱动篇】解决Windows驱动更新导致AMD Software软件无法正常启动问题 【操作可能有风险&#xff0c;请提前做好数据备份&#xff0c;设置系统还原点等&#xff0c;防止系统出现问题&#xff01;&#xff01;&#xff01;】 【操作可能有风险&#xff0c;请提前做好数…

达梦数据库命令行安装+命令行创建实例

首先创建dmdba用户 groupadd dminstall useradd -g dminstall dmdba sudo passwd dmdba 修改dmdba的权限 cd /etc/security/ limits.d 增加两行代码 dmdba soft nofile 65536 dmdba hard nofile 65536 创建安装文件夹 授权dmdba mkdir -p /app/dbDB8 mkdir installDa…

redis实际应用场景及并发问题的解决

业务场景 接下来要模拟的业务场景: 每当被普通攻击的时候&#xff0c;有千分之三的概率掉落金币&#xff0c;每回合最多爆出两个金币。 1.每个回合只有15秒。 2.每次普通攻击的时间间隔是0.5s 3.这个服务是一个集群&#xff08;这个要求暂时不实现&#xff09; 编写接口&…

代码随想录算法训练营第三十四天 |1005. K 次取反后最大化的数组和 、134. 加油站、135. 分发糖果

代码随想录算法训练营第三十四天 |1005. K 次取反后最大化的数组和 、134. 加油站、135. 分发糖果 1005. K 次取反后最大化的数组和题目解法 134. 加油站题目解法 135. 分发糖果题目解法 感悟 1005. K 次取反后最大化的数组和 题目 解法 考虑绝对值 class Solution { public…

libVLC 视频裁剪

使用 libVLC 进行视频裁剪并不是直接支持的功能&#xff0c;因为 libVLC 主要是一个媒体播放库。然而&#xff0c;你可以通过调整播放窗口的大小和设置视频输出的区域来实现一种“视觉上的裁剪”。这意味着视频本身并没有被修改&#xff0c;但可以控制显示给用户的视频区域。 …

【OJ】动归练习二

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 91.解码方法1.1 分析1.2 代码 2. 62.不同路径2.1 分析2.2 代码 3. 63.不同路径 II3.1 分析3.2 代码 1. 91.解码方法 1.1 分析 题目所述就是把一串数字反向解码为字母映射出来&#xff0c;有多少种方法。 题目也说&…