题目描述

现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系,在坐标系中,奶酪的下表面为z =0,奶酪的上表面为z=h。

现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐 标。如果两个空洞相切或是相交,则 Jerry 可以从其中一个空洞跑到另一个空洞,特别地,如果一个空洞与下表面相切或是相交,Jerry 则可以从奶酪下表面跑进空洞;如果 一个空洞与上表面相切或是相交,Jerry 则可以从空洞跑到奶酪上表面。

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

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

   DIS(P1,P2)=√[(x1-x2)2+(y1-y2)2+(z1-z2)2]
输入格式

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

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

接下来是T组数据,每组数据的格式如下: 第一行包含三个正整数 n,h 和r,两个数之间以一个空格分开,分别代表奶酪中空洞的数量,奶酪的高度和空洞的半径。

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


输出格式:

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

本题是用并查集做的(好像很多人都是用搜索做的),而且这道题好像也并不是一道小水题了(还需要判断一下距离==),但是这并不能难道蒟蒻的我←_←

思想:除了并查集外,我们就只需要判断距离了,首先,我们现将能与x-y平面连通的球与 0点 并到一起,高度能达到h的球与 n+1 点并到一起,然后如果这两个球之间的距离 l<=2*r ,那么我们就把他们并到一起,最后只去要查询一下 0点 与 n+1点 是否连同就能得出小老鼠是不是可以跑到奶酪上面去了。

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=;
struct cp
{
  LL x,y,z;
}e[maxn];
int f[maxn];
bool cmp(cp a,cp b)
{
  return a.z<b.z;
}
LL square(LL x)
{
  return x*x;
}
LL DIS(cp a,cp b)
{
  return square(a.z-b.z)+square(a.x-b.x)+square(a.y-b.y);
}
int find(int x)
{
  if(f[x]==x) return x;
  return f[x]=find(f[x]);
}
void Union(int a,int b)
{
  int x=find(a),y=find(b);
  f[x]=y;
}
int main()
{
  LL n,m;
  LL t,h;
  LL r;
  scanf("%lld",&t);
  while(t--){
    scanf("%lld%lld%lld",&n,&h,&r);
    for(int i=;i<=n+;i++) f[i]=i;
    for(int i=;i<=n;i++){
      scanf("%lld%lld%lld",&e[i].x,&e[i].y,&e[i].z);
    }
    sort(e+,e+n+,cmp);
    for(int i=;i<=n;i++)
     for(int j=i+;j<=n;j++)
      if(DIS(e[i],e[j])<=*r*r) Union(i,j);
    for(int i=;i<=n;i++){
      if(e[i].z-r<=) Union(i,);
      if(e[i].z+r>=h) Union(i,n+);
    }
    if(find()==find(n+)) printf("Yes\n");
    else printf("No\n");
  }
  return ;
}

Noip2017 Day2 T1 奶酪的更多相关文章

  1. NOIP2017 Day2 T1 奶酪(并查集)

    题目描述 现有一块大奶酪,它的高度为 hhh ,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z=0z ...

  2. Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数

    Day1 T1 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小 ...

  3. Noip2014 提高组 Day1 T1 生活大爆炸版石头剪刀布 + Day2 T1 无线网络发射器选址

    Day1 T1 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升 ...

  4. 济南学习 Day2 T1 am

    T1 题意:从1− n中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数 最大可能是多少. 解析: 1.  质因数分解 2.  1->n用质因数指数的相加的形式将1*n累乘起来 3.   ...

  5. NOIP 2014 Day2 T1 无线网络发射器

    #include<iostream> #include<cmath> #include<cstdlib> #include<cstdio> #inclu ...

  6. NOIP 2015复赛提高组Day2 T1==Codevs 4768 跳石头

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold  题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中 ...

  7. Codevs 4768 跳石头 NOIP2015 DAY2 T1

    4768 跳石头 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 一年一度的"跳石头"比赛又要开始了! ...

  8. FJ省队集训DAY2 T1

    思路:转换成n条三维空间的直线,求最大的集合使得两两有交点. 有两种情况:第一种是以某2条直线为平面,这时候只要统计这个平面上有几条斜率不同的直线就可以了 还有一种是全部交于同一点,这个也只要判断就可 ...

  9. XJOI网上同步训练DAY2 T1

    [问题描述] 为了迎接校庆月亮中学操场开始施工.不久后操场下发现了很多古墓这些古墓中有很多宝藏.然而学生们逐渐发现自从操场施工之后学校的运气就开始变得特别不好.后来经过调查发现古墓下有一个太守坟由于操 ...

随机推荐

  1. js截取URL网址参数

    将本页代码复制粘贴到html页面,打开即可. <!DOCTYPE html> <html lang="en"> <head> <meta ...

  2. troubleshoot之:GC调优到底是什么

    目录 简介 那些GC的默认值 GC的选择 GC的最大线程个数 初始化heap size 最大的heap size 分层编译技术 我们到底要什么 最大暂停时间 吞吐率 简介 我们经常会听到甚至需要自己动 ...

  3. golang 判断IPv4 or IPv6 address

    import strings func IsIPv4(address string) bool { return strings.Count(address, ":") < ...

  4. 手把手教Linux驱动1-模块化编程,玩转module

    大家好,从本篇起,一口君将手把手教大家如何来学习Linux驱动,预计会有20篇关于驱动初级部分知识点.本专题会一直更新,有任何疑问,可以留言或者加我微信. 一.什么是模块化编程? Linux的开发者, ...

  5. Hive日期、时间转换:YYYY-MM-DD与YYYYMMDD;hh.mm.ss与hhmmss的相互转换

    思路 YYYY-MM-DD与YYYYMMDD:hh-mm-ss与hhmmss的相互转换有两种办法,第一种是利用UNIX时间戳函数,第二种是利用字符串拼接函数. YYYY-MM-DD与YYYYMMDD相 ...

  6. Java数据结构——2-3树

    定义2-3树是平衡的3路查找树,其中2(2-node)是指拥有两个分支的节点,3(3-node)是指拥有三个分支的节点.B-树是一种平衡的多路查找树,2-3树属于b-树,其也同样具有B-树的性质,如m ...

  7. 区块链入门到实战(20)之以太坊(Ethereum) – 虚拟机(E.V.M.)

    作用:执行智能合约代码的引擎 以太坊(Ethereum)虚拟机是执行智能合约代码的引擎. 可以用某种语言,例如Solidity语言,开发智能合约程序,编译成以太坊(Ethereum)虚拟机支持的字节码 ...

  8. 传统servelt项目之分页操作

    需求说明: • 演示最终分页效果 • 提供分页素材     • 分页的作用 • 数据量大,一页容不下 • 后台查询部分数据而不是全部数据 • 降低带宽使用,提高访问速度     • 分页的实现思路 • ...

  9. Python发送get、post请求

    import json import requests #获取北京天气 # #url= "https://wis.qq.com/weather/common?source=xw&we ...

  10. 利用分块传输吊打所有WAF--学习笔记

    在看了bypassword的<在HTTP协议层面绕过WAF>之后,想起了之前做过的一些研究,所以写个简单的短文来补充一下文章里“分块传输”部分没提到的两个技巧. 技巧1 使用注释扰乱分块数 ...