【洛谷p3958】奶酪
题前废话不知道说啥了啊qwq(越来越沉默寡言)
好了看题:
SOLUTION:
思路的话,大概是搜索,然后大概广搜???
但是我们今天写深搜(也是听xcg大佬讲了以后的整理博)
首先先是读入,注意因为有多组数据,所以一定要记得重新赋值例如memset。
然后我们寻找可以从奶酪下表面进去的洞,显然当一个洞的高度z-r<=0时,就可以通过了;
for(int i=;i<=n;i++){
if(a[i].z-r<=)
vis[i]=,dfs(i);
}
然后我们可以尝试剪枝(然后亲测剪枝以后更慢了???)
剪枝:因为当你某一个不行时,比它高的显然都不行,那么直接break;
不加sort:
加了sort:
然后搜索:
结束条件:某个点的高度z+r后>=h;同时标记bj=1;表示有解
然后枚举点(这里dfs保证每个点只枚举一次,因为是判断有解,所以不需要记路径也就不需要管不同路径的影响)
如果bj=1,那么表示已经搜到解了,不必再搜,直接break;
否则首先判断:
1.这个点有没有被访问过
2.这两个空间站是否连通(关于连通我们可以比较它们圆心之间的距离与两倍半径的大小关系,当距离小于两倍半径时,连通)
如果没有访问过并且连通,dfs这个枚举到的点,vis=1;
然后最后判断bj=1/0,对应Yes/No;
CODE:
#include<bits/stdc++.h>
#define ll long long using namespace std; inline ll read(){
ll ans=;
char last=' ',ch=getchar();
while(ch>''||ch<'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=(ans<<)+(ans<<)+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} ll t,n,h,r;
bool vis[],bj;
struct node{
ll x,y,z;
}a[];
bool cmp(node a,node b){
return a.z<b.z;
} double dis(ll x1,ll y1,ll z1,ll x2,ll y2,ll z2){
return sqrt((double)(x1-x2)*(double)(x1-x2)+(double)(y1-y2)*(double)(y1-y2)+(double)(z1-z2)*(double)(z1-z2));
} void dfs(ll k){
if(a[k].z+r>=h){
bj=;
return;
}
for(int i=;i<=n;i++){
if(bj) return;
if(!vis[i]&&dis(a[i].x,a[i].y,a[i].z,a[k].x,a[k].y,a[k].z)<=2.0*r){
vis[i]=;
dfs(i);
}
}
} int main(){
t=read();
for(int T=;T<=t;T++){
n=read();h=read();r=read();
bj=;
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++){
a[i].x=read();
a[i].y=read();
a[i].z=read();
} sort(a+,a+n+,cmp);
for(int i=;i<=n;i++){
if(bj) break;
if(a[i].z-r<=)
vis[i]=,dfs(i);
else break;
}
if(bj) printf("Yes\n");
else printf("No\n");
}
return ;
}
【洛谷p3958】奶酪的更多相关文章
- 洛谷 P3958 奶酪
谨以此题来纪念我爆炸的NOIp2017 这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分.今天无意看到这道题,终于AC 首先这道题要考虑一下精度问题,虽然出 ...
- 洛谷 P3958 奶酪 并查集
目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪 ...
- 洛谷P3958 奶酪
题目链接 这道题貌似可以用BFS来写吧qwq. 我用的是并查集,把联通的洞合并在同一个几何中,最后只需要判断是否存在上表面和下表面有相同集合的洞即可. 但是需要注意的是还有这样的一种情况:有一个大洞贯 ...
- 『题解』洛谷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] NOIP2017 奶酪
问题描述 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z = 0,奶酪 ...
- 题解【洛谷P3958】[NOIP2017]奶酪
题面 题解 我们考虑使用一个并查集维护空洞之间的关系. 如果两个空洞能相互到达,那么它们的祖先也是相同的. 枚举从哪一个空洞开始,能否到达奶酪的上表面. 如果能到达就输出Yes,否则输出No. 注意开 ...
- 【深度优先搜索】NOIP2017_D2T1 洛谷3958奶酪
这道题的写法大体有两种:大法师DFS和并查集,两种算法都不难,本篇博客主要讲解DFS,而且测试数据特水,连个剪枝都不用都可以过. 题目描述[luogu传送门] 现有一块大奶酪,它的高度为 h,它的长度 ...
随机推荐
- Git版本控制工具初识
Git使用教程 0 Git下载安装 下载网址:https://www.git-scm.com/download/ 安装时,一路next就可以了,如果遇到下载很慢时,可以选择换个浏览器试试,实在不行就找 ...
- 2016.5.21【初中部 NOIP提高组】模拟赛A 总结
这次比赛的题目看上去好像不难,但当开始仔细想的时候才发现,并没有那么简单. T1旅行:刚开始看到k<=4的时候还以为有题可以AC了,不过呢,还是毫无思路. T3Pty爬山:雨天的尾巴最近打了几道 ...
- java.util.Properties的使用及读取资源文件
1.工具类Utils package com.oy.utils; import java.io.BufferedInputStream; import java.io.Closeable; impor ...
- PHP上传一个文件夹
该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开始. 如何分 ...
- Socket通信前必须考虑的几件事
如何处理I/O?是让程序阻塞等待响应,还是在后台处理这些事?这是软件设计的关键因素.阻塞式的I/O操作会让程序架构难以扩展,而后台处理I/O也是比较困难的. 如何处理那些临时的.来去自由的组件?我 ...
- 前端HTTP缓存
Web 缓存大致可以分为:数据库缓存.服务器端缓存(代理服务器缓存.CDN 缓存).浏览器缓存.其中前端比较关心的是浏览器缓存,包括今天要说的HTTP缓存和前面说过的cookie.localStora ...
- vue之router-link
<router-link> 组件支持用户在具有路由功能的应用中(点击)导航. 1.to:表示目标路由的链接.当被点击后,内部会立刻把 to 的值传到 router.push(),所以这个 ...
- 在Ubuntu18.04下安装Java 11
一直以来,本人都使用第三方软件包"ppa:linuxuprising/java"安装Java JDK,最近一次安装时发现无法成功.这是由于现在无法直接从Oracle官网下载Java ...
- iOS Beta 升级或降级
https://sspai.com/post/45442 public beta网站上安装profile, 去手机看更新 developer beta, 登录开发者网站, downloads, 下载p ...
- 从 Quora 的 187 个问题中学习机器学习和NLP
从 Quora 的 187 个问题中学习机器学习和NLP 原创 2017年12月18日 20:41:19 作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai ...