题目描述

现有一块大奶酪,它的高度为 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. mycat数据库集群系列之数据库多实例安装

    mycat数据库集群系列之数据库多实例安装 最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考.本次系列终结大概包括以下内容:多数据 ...

  2. MMD日文乱码解决

    记录一下自己在学习MMD遇到的问题. 日文乱码是很常见的,因为很多MMD资源是日本的. 1.解压乱码 我以好压为例,其他解压软件也是可以通过设置解决的 设置

  3. 【POJ3071】Football - 状态压缩+期望 DP

    Description Consider a single-elimination football tournament involving 2n teams, denoted 1, 2, …, 2 ...

  4. Disruptor极速队列

    参考:http://www.cnblogs.com/haiq/p/4112689.html Disruptor 是线程内通信框架,用于线程里共享数据.LMAX 创建Disruptor作为可靠消息架构的 ...

  5. Ng-Matero V10 正式发布!

    Angular v10 在六月下旬就悄无声息的发布了,虽然 v9 的发布延期了两个月,但是 v10 并没有受影响,仍然如期而至. 相比 v9 的重量级发布,v10 并没有颠覆性的变化,主要还是 bug ...

  6. go module 获取码云私有仓库代码

    因为码云免费组织有5人限制,其他人想获得代码 只能通过别的方式 go mod 底层使用的git 获取代码, 所以首先解决如何通过git clone代码 思路为通过ssh密钥的方式获取 首先在码云仓库部 ...

  7. JDBC理论知识

    JDBC理论知识 JDBC基础 JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统.通用的SQL数据库存取和操作的公共接口(一组API), 定义了用来访问数 ...

  8. 寻找猴王小游戏php代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 单元测试与单元测试框架 Jest

    什么是单元测试? 测试是一种验证我们的代码是否可以按预期工作的手段. 被测试的对象可以是我们程序的任何一个组成部分.大到一个分为多步骤的下单流程,小到代码中的一个函数. 单元测试特指被测试对象为程序中 ...

  10. 如何扩展单个Prometheus实现近万Kubernetes集群监控?

    引言 TKE团队负责公有云,私有云场景下近万个集群,数百万核节点的运维管理工作.为了监控规模如此庞大的集群联邦,TKE团队在原生Prometheus的基础上进行了大量探索与改进,研发出一套可扩展,高可 ...