洛谷P3958 奶酪
题目链接
这道题貌似可以用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 奶酪的更多相关文章
- 洛谷 P3958 奶酪
谨以此题来纪念我爆炸的NOIp2017 这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分.今天无意看到这道题,终于AC 首先这道题要考虑一下精度问题,虽然出 ...
- 洛谷 P3958 奶酪 并查集
目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪 ...
- 『题解』洛谷P3958 奶酪
Portal Portal1: Luogu Portal2: LibreOJ Portal3: Vijos Description 现有一块大奶酪,它的高度为\(h\),它的长度和宽度我们可以认为是无 ...
- 洛谷P3958 奶酪 并查集
两个空洞可互达当且仅当两个空洞相切,即球心距离小于等于球的直径. 一一枚举两个可互达的空洞,并用并查集连起来即可. Code: #include<cstdio> #include<c ...
- 洛谷 P3958 奶酪 题解
思路: 先看哪两个点能互通,再广搜寻找下一步,如果到达高度h就输出Yes,如果所有路径都找过都不能到达高度h就输出No. #include<bits/stdc++.h> using nam ...
- 【洛谷p3958】奶酪
奶酪[题目链接] 题前废话不知道说啥了啊qwq(越来越沉默寡言) 好了看题: SOLUTION: 思路的话,大概是搜索,然后大概广搜??? 但是我们今天写深搜(也是听xcg大佬讲了以后的整理博) 首先 ...
- [洛谷P3958] NOIP2017 奶酪
问题描述 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z = 0,奶酪 ...
- 题解【洛谷P3958】[NOIP2017]奶酪
题面 题解 我们考虑使用一个并查集维护空洞之间的关系. 如果两个空洞能相互到达,那么它们的祖先也是相同的. 枚举从哪一个空洞开始,能否到达奶酪的上表面. 如果能到达就输出Yes,否则输出No. 注意开 ...
- 【深度优先搜索】NOIP2017_D2T1 洛谷3958奶酪
这道题的写法大体有两种:大法师DFS和并查集,两种算法都不难,本篇博客主要讲解DFS,而且测试数据特水,连个剪枝都不用都可以过. 题目描述[luogu传送门] 现有一块大奶酪,它的高度为 h,它的长度 ...
随机推荐
- 检查WIFI是否连接
查看网络连接 查看WiFi连接状态 (连接- -断开)
- win10的host设置
路径:C:\Windows\System32\drivers\etc\hosts 例如: 127.0.0.1 localhost 10.201.3.177 apmdbm1
- asp.net 在repeater控件中加按钮
在repeater中加入方法有两种方法: 第一种:是对repeater控件的行添加OnItemCommand事件,添加方法也是有两种 1.在设计页面中,选中repeater控件右击==>属性== ...
- Spring 事务声明无效果(转)
为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常时候 日志是打印了,但是加的事务却没有回滚. 例: 类似这样的方法不会回滚 (一个 ...
- GPU卡掉卡
这几天用GPU卡跑东西,老是提示opencv的一个问题.但是我换个数据跑就没问题.说明代码是没问题的.发挥我作为女人的特质,从起试试吧.结果从起后找不到GPU卡了.nvidia-smi提示我没有安装最 ...
- Java基础随笔2
各类运算符: 算数运算符::+,-,*,/,%,++,-- ++:自增 --:自减 单独使用的时候,++或者--无论是放在变量的前面还是后面,结果是一样的. 参与操作的时候: 如果++或者--在变量的 ...
- 自己平时收集的css、html笔记(适合初级前端攻城狮)
实习了一年时间,陆陆续续记录下来一堆笔记,不过也丢失了一些... 以后会持续更新.扩展,现在把碰到的知识点归纳于此,方便翻阅 一.html部分 1.取消iPhone自动识别数字为拨打号码 <me ...
- linux mariadb
https://www.linuxidc.com/Linux/2016-03/128880.htm -- sql 导入 接着输入你所导入到Centos下的数据库文Student.sql文件的位置例如: ...
- Oracle数据库中游标的游标的使用
本人不喜欢说概念啥的,就直接说明使用方法吧 案例1: DECALRE --声明游标 CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE ...
- php第一节(入门语法、数据类型)
<?php /** * 变量命名用 $ 符 * 变量名称的命名规范 * 1.变量名称以$标示 * 2.变量名称只能以字母和下划线开头 * 3.变量的名称只能包含字母.下划线.数字 * 4.变量名 ...