题目链接

这道题貌似可以用BFS来写吧qwq。

我用的是并查集,把联通的洞合并在同一个几何中,最后只需要判断是否存在上表面和下表面有相同集合的洞即可。

但是需要注意的是还有这样的一种情况:有一个大洞贯穿了整个奶酪所以要对n=1时进行特判。

AC代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 10010
using namespace std;
struct item
{
int u;
double x;
double y;
double z;
int f;
}chs[MAXN]; bool book1[MAXN],book2[MAXN];
int f[MAXN]; int find(int k)
{
if(f[k]==k) return k;
else return f[k]=find(f[k]);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(book1,0,sizeof(book1));
memset(book2,0,sizeof(book2));
int n,h,r;
scanf("%d%d%d",&n,&h,&r);
for(int i=1;i<=n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
chs[i].u=i;
chs[i].x=x;
chs[i].y=y;
chs[i].z=z;
chs[i].f=i;
f[i]=i;
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
int p=find(i);
int c=find(j);
double dis=sqrt((chs[i].x-chs[j].x)*(chs[i].x-chs[j].x)+(chs[i].y-chs[j].y)*(chs[i].y-chs[j].y)+(chs[i].z-chs[j].z)*(chs[i].z-chs[j].z));
// printf("dis=%f\n",dis);
if(dis<=2*r)
{
if(p==c) continue;
else
{
f[p]=c;
chs[p].f=c;
}
} }
}
for(int i=1;i<=n;i++)
{
if(chs[i].z>=(h-r)&&chs[i].z<=h) book1[i]=1;
}
for(int i=1;i<=n;i++)
{
if(chs[i].z>=0&&chs[i].z<=r) book2[i]=1; } bool sign=0;
if(n==1)
{
if(2*r>=h&&chs[n].z-r<=0&&chs[n].z+r>=h)
{
printf("Yes\n");
continue;
}
else
{
printf("No\n");
continue;
}
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
// printf("f[%d]=%d ,find[%d]=%d,",i,find(i),j,find(j));
if(book1[i]&&book2[j]&&(find(i)==find(j))&&!sign)
{
sign=1;
// printf("i=%d,j=%d\n",i,j);
printf("Yes\n");
}
if(book1[j]&&book2[i]&&(find(i)==find(j))&&!sign)
{
sign=1;
// printf("i=%d,j=%d\n",i,j);
printf("Yes\n");
}
}
}
if(!sign) printf("No\n");
}
return 0;
}

洛谷P3958 奶酪的更多相关文章

  1. 洛谷 P3958 奶酪

    谨以此题来纪念我爆炸的NOIp2017 这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分.今天无意看到这道题,终于AC 首先这道题要考虑一下精度问题,虽然出 ...

  2. 洛谷 P3958 奶酪 并查集

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

  3. 『题解』洛谷P3958 奶酪

    Portal Portal1: Luogu Portal2: LibreOJ Portal3: Vijos Description 现有一块大奶酪,它的高度为\(h\),它的长度和宽度我们可以认为是无 ...

  4. 洛谷P3958 奶酪 并查集

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

  5. 洛谷 P3958 奶酪 题解

    思路: 先看哪两个点能互通,再广搜寻找下一步,如果到达高度h就输出Yes,如果所有路径都找过都不能到达高度h就输出No. #include<bits/stdc++.h> using nam ...

  6. 【洛谷p3958】奶酪

    奶酪[题目链接] 题前废话不知道说啥了啊qwq(越来越沉默寡言) 好了看题: SOLUTION: 思路的话,大概是搜索,然后大概广搜??? 但是我们今天写深搜(也是听xcg大佬讲了以后的整理博) 首先 ...

  7. [洛谷P3958] NOIP2017 奶酪

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

  8. 题解【洛谷P3958】[NOIP2017]奶酪

    题面 题解 我们考虑使用一个并查集维护空洞之间的关系. 如果两个空洞能相互到达,那么它们的祖先也是相同的. 枚举从哪一个空洞开始,能否到达奶酪的上表面. 如果能到达就输出Yes,否则输出No. 注意开 ...

  9. 【深度优先搜索】NOIP2017_D2T1 洛谷3958奶酪

    这道题的写法大体有两种:大法师DFS和并查集,两种算法都不难,本篇博客主要讲解DFS,而且测试数据特水,连个剪枝都不用都可以过. 题目描述[luogu传送门] 现有一块大奶酪,它的高度为 h,它的长度 ...

随机推荐

  1. IOS 照片浏览器总结(思想步骤)

    1. 界面分析========================================1> 需要读取或修改属性的控件需要设置属性// 序号标签// 图片// 图片描述// 左边按钮// ...

  2. 【转】netstat 命令当中的内部地址和外部地址分别代表的是什么?

    RT,用自己的话解释,不要搬网上的内容.尽量可以简洁,谢谢 2015-03-07 17:41 提问者采纳   网络连接是有2方参与,自己就是“内部地址”,别人就是“外部地址”,就这么简洁. 再举个例子 ...

  3. SpringMVC学习记录五——功能开发及参数处理

    15       包装类型pojo参数绑定 15.1      需求 商品查询controller方法中实现商品查询条件传入. 15.2      实现方法 第一种方法:在形参中 添加HttpServ ...

  4. C# 基础(一) 访问修饰符、ref与out、标志枚举等等

    C# 基础(一) 访问修饰符.ref与out.标志枚举等等 一.访问修饰符 在C#中的访问修饰符有:private.protected.internal.public public:公共类型,同一程序 ...

  5. 外部的 JavaScript

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  6. linux c做服务端使用多线程接收图片并且将图片写入数据库

    #include<sys/socket.h> #include<sys/types.h> #include<sys/stat.h>//包含文件的全部结构,属性 #i ...

  7. sudo cd的错误

    问题说明 今天用MySQL建了库,想看看. 当到了这步,心里的第一个感觉就是电脑坏了.后来查了查才知道了原因. 原因 cd不是一个应用程序而是Linux内建的命令,而sudo仅仅只对应用程序起作用. ...

  8. Python 学习笔记(八)Python列表(一)

    列表基本操作 列表(list)定义  列表是Python中的一种对象类型,也是一种序列 对象类型:list 表示方法:[ ] python 列表中的元素可以是任何类型的对象 >>> ...

  9. iOS 让视图UIView单独显示某一侧的边框线

    iOS 让视图UIView 单独显示某一侧的边框线   有时候需要让view显示某一侧的边框线,这时设置layer的border是达不到效果的.在网上查阅资料发现有一个投机取巧的办法,原理是给view ...

  10. iOS之UITextField输入错误的震动动画

    //左右震动效果 - (void)shake:(UIView *)view { CGRect frame = view.frame; CAKeyframeAnimation *shakeAnimati ...