题目传送门

Orz去年考场上做这道题的我应该还在抱怨没学过空间几何,不一会太困了就开始打瞌睡,然后为了防止睡觉开始在devc++上写默写离骚(逃

思路:如果两个空洞相交,那么把他们并在一个集合里。最后对于每个集合,查看他们中是否同时存在与下表面相通和与上表面相通的空洞,存在则Yes.

细节:1   如何判断相交?类比平面中的概念,判断空间中两圆是否相交同样可以通过圆心间距离是否小于等于二倍半径来确定。

   2   如何判断是否同时存在两个与下表面相通和与上表面相通的空洞?可以在输入的时候预处理出所有与下表面相通和与上表面相通的空洞,然后将他们进行枚举,如果存在在同一集合的情况则合法。

   3  开long long!!!

Code

 #include<cstdio>
#include<cmath>
#define maxn 1090 using namespace std;
typedef long long ll; int T;
ll n,h,r,cnt,sum;
bool flag;
int fa[maxn],qaq[maxn],qwq[maxn];
struct node{
ll x,y;
ll z;
}point[maxn]; int getf(int p)
{
if(fa[p]==p) return p;
else return getf(fa[p]);
} void init()
{
cnt=;sum=;flag=;
} double dis(int l,int r)
{
return sqrt((point[l].x-point[r].x)*(point[l].x-point[r].x)+(point[l].y-point[r].y)*(point[l].y-point[r].y)+(point[l].z-point[r].z)*(point[l].z-point[r].z));
} int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld",&n,&h,&r);
for(int i=;i<=n;i++)
{
scanf("%lld%lld%lld",&point[i].x,&point[i].y,&point[i].z);
if(point[i].z-r<=) qaq[++cnt]=i;
if(point[i].z+r>=h) qwq[++sum]=i;
}
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i==j) continue;
if(dis(i,j)<=(double)*r)
{
int pp=getf(i);
int qq=getf(j);
if(pp!=qq)
fa[qq]=pp;
}
}
for(int i=;i<=cnt;i++)
{
for(int j=;j<=sum;j++)
if(getf(qaq[i])==getf(qwq[j]))
{
printf("Yes\n");
flag=;
break;
}
if(flag) break;
}
if(!flag) printf("No\n");
init();
}
return ;
}

小结:开始看题看的我一头雾水 T1难度都做不出

我还是太弱了。

NOIp 2017 奶酪 【并查集】 By cellur925的更多相关文章

  1. #C++初学记录(奶酪#并查集)

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

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

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

  3. 洛谷 P3958 奶酪 并查集

    目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪 ...

  4. NOIp2017D2T1(luogu3968) 奶酪 (并查集)

    并查集. 判相切或相交的时候可以两边同时平方,就不需要double和开根号了. #include<cstdio> #include<cstring> #include<a ...

  5. 浅谈并查集 By cellur925【内含题目食物链、银河英雄传说等】

    什么是并查集? 合并!查询!集合! 专业点说? 动态维护若干不重叠的和,支持合并查询的数据结构!(lyd老师说的) 数据结构特点:代表元.即为每个集合选择一个固定的元素,作为整个集合的代表,利用树形结 ...

  6. 洛谷P3958 奶酪 并查集

    两个空洞可互达当且仅当两个空洞相切,即球心距离小于等于球的直径. 一一枚举两个可互达的空洞,并用并查集连起来即可. Code: #include<cstdio> #include<c ...

  7. [noip模拟]心<并查集>

    背景描述: 不是一切深渊都是灭亡 不是一切灭亡都覆盖在弱者的头上 ——<这也是一切> 舒婷 有N个透明的盒子, 每个盒子里面有两个不同颜色的球, 总共有M种颜色. Alice和Bob又在玩 ...

  8. [NOIP 2017] 奶酪

    [题目链接] http://uoj.ac/problem/332 [算法] 直接搜索即可 注意使用long long [代码] #include<bits/stdc++.h> using ...

  9. Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)

    3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...

随机推荐

  1. [Bzoj2500]幸福的道路(树上最远点)

    2500: 幸福的道路 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 474  Solved: 194[Submit][Status][Discuss ...

  2. Google C++ style guide——C++类

    1.构造函数的职责 构造函数中仅仅进行那些没有实际意义的初始化.由于成员变量的"有意义"的值大多不在构造函数中确定. 能够的话,使用Init()方法集中初始化为有意义的数据. 长处 ...

  3. Oracle 数据库管理员的任务

    设计.实施和维护 Oracle 数据库时,按优先次序排列的任务包括:   1. 确定数据库服务器硬件   2. 安装 Oracle 软件   3. 为数据库和安全策略制定计划   4. 创建.移植和打 ...

  4. HTC 328T 如何恢复出厂设置

    设置-存储-恢复出厂设置(在存储的最下面,往下拉)

  5. Visual Studio VS如何重置所有设置

    工具-导入和导出设置-重置所有设置,点击下一步即可.                  

  6. react-router-redux

    reducer与按需加载组件的时候,一并加载对应的state,具体流程就不多说了,看代码! reducer import { combineReducers } from 'redux' import ...

  7. LightOj 1027 A Dangerous Maze【概率】

    题目链接:http://www.lightoj.com/volume_showproblem.php? problem=1027 题意: 你面前有n个门,每一个相应一个数字,若为正xi.代表xi分钟后 ...

  8. Android开发:怎样隐藏自己的app应用

    本文主要介绍怎样通过改动AndroidManifest.xml清单文件来达到隐藏自身应用的目的,不是隐藏第三方应用.为了不浪费大家时间.特此说明. 转载请注明作者xiong_it和链接:http:// ...

  9. poj 1840 哈希

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14093   Accepted: 6927 Description ...

  10. JSON序列化-化繁为简

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