奶酪【题目链接】

题前废话不知道说啥了啊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】奶酪的更多相关文章

  1. 洛谷 P3958 奶酪

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

  2. 洛谷 P3958 奶酪 并查集

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

  3. 洛谷P3958 奶酪

    题目链接 这道题貌似可以用BFS来写吧qwq. 我用的是并查集,把联通的洞合并在同一个几何中,最后只需要判断是否存在上表面和下表面有相同集合的洞即可. 但是需要注意的是还有这样的一种情况:有一个大洞贯 ...

  4. 『题解』洛谷P3958 奶酪

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

  5. 洛谷P3958 奶酪 并查集

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

  6. 洛谷 P3958 奶酪 题解

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

  7. [洛谷P3958] NOIP2017 奶酪

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

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

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

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

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

随机推荐

  1. Linux php.ini的安全优化配置

    Linux php.ini的安全优化配置   (1) PHP函数禁用找到 disable_functions = 该选项可以设置哪些PHP函数是禁止使用的,PHP中有一些函数的风险性还是相当大的,可以 ...

  2. python-上传文件的几种方式

    from requests_toolbelt import MultipartEncoder import requests # from_data上传文件,注意参数名propertyMessageX ...

  3. 前端node面试题之---对比JS和NodeJS的区别

    区别: 1.JS运行在浏览器端,用于用户的交互效果,NodeJS运行在服务器端,用于服务器的操作,例如,Web服务器创建,数据库的操作,文件的操作等 2.JS运行在浏览器端,存在多个JS解释器,存在兼 ...

  4. sqlite3 on python for newbies

    python 集成了 sqlite3 ,其接口很简单: import sqlite3 db_connection = sqlite3.connect(db_filename) db_cursor = ...

  5. MIF文件生成说明

    mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.生成QuartusII11.0可用的mif文件,有如下几种方式: 方法1:利用Q ...

  6. asp.net实现大视频上传

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...

  7. HDU 2037(贪心)

    “今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了.  ...

  8. 搭建 .Net RabbitMQ 开发环境

    开发环境,window 10 64位,VS2017,系统账号需要用administrator. 1 先需要安装erlang语言开发包,一路默认安装就是了,地址:http://www.erlang.or ...

  9. vue.js条件渲染 v-if else-if v-for

    v-if: 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: {{#if ok}} <!-- Handlebars 模板 --> <h1>Yes</ ...

  10. es的脑裂

    一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点:所以无论访问那个节点都可以查看集群的状态信息. 而脑裂问题的出现就是因为从节点在选择主节点上出现分 ...