【洛谷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:
{~JL2V9C7.png)
加了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 ;
}
SZ2L$T~29V}4S)HT.png)
【洛谷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,它的长度 ...
随机推荐
- layui token 过期 重新登陆
这个方法你要全局设置 //jquery全局配置 $.ajaxSetup({ cache: false, crossDomain: true, headers :{' ...
- Django【第10篇】:Django之分页初级版本
分页和中间件 一.分页 Django的分页器(paginator) view.py from django.shortcuts import render,HttpResponse # Create ...
- java实现队列和栈
队列:队列其实就是我们生活中的排队现象,先进入的先出,后进入的后出,代码实现如下: public class Queue<E> { private int front;//队头一端,只允许 ...
- postman实现Base64加密
1.新建一个Collection 2.新建一个request 3.新增一个环境变量(全局变量也可以) 4.在variable中填入需要加密的变量名称,比如password 5.在body中填好参数,需 ...
- scrapy处理post请求的传参和日志等级
一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...
- js-点出弹框后(除了点击窗口上的叉子),点其他地方能够关闭窗口???
HTML: <div class="A"> <div class="B"></div> </div> JS: $ ...
- 判断div里面的子集是否含有特定的类
if($('#BankCardId .card').length){ alert("请绑定银行卡"); } if ($('#user-20130011 #age-20130011' ...
- Oulipo【Hash】
Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 45515 Accepted: 18181 Descript ...
- 查看Oracle数据库中的执行计划
1.set autotrace traceonly命令 2.explain plan for命令 1)explain plan for select * from dual; 2)select * f ...
- dojo 官方翻译 dojo/_base/array 版本1.10
官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/array.html#dojo-base-array array模块dojo进行 ...