开始看到题以为是计算几何,后面发现不是,然后秒掉了。

可能写SPFA写多了,别人都是并查集做的,我用的是SPFA。

不过无所谓,我们把题目中的下底面和上表面看成两个点,那么就是求这两个点的连通性,如果连通,出Yes,否则出No。

转换成图论,如果两个洞的半径乘2大于等于两洞球心之间的距离,那么这两个洞就直接相通,连边,总共平方复杂度建图。

然后跑SPFA,如果终点的dis不为inf,就可到达。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. const int MAXN=+,inf=0x3f3f3f3f;
  5. int T,n,h,p[MAXN],d[MAXN],to[MAXN*MAXN*],nex[MAXN*MAXN*],beg[MAXN],w[MAXN*MAXN*],e,s,t;
  6. ll r;
  7. struct node{
  8. int x,y,z;
  9. };
  10. node hole[MAXN];
  11. inline void read(int &x)
  12. {
  13. int data=,w=;
  14. char ch=;
  15. while(ch!='-'&&(ch<''||ch>''))ch=getchar();
  16. if(ch=='-')w=-,ch=getchar();
  17. while(ch>=''&&ch<='')data=(data<<)+(data<<)+(ch^''),ch=getchar();
  18. x=data*w;
  19. }
  20. inline bool connect(int i,int j)
  21. {
  22. if(4ll*r*r-(ll)(hole[i].x-hole[j].x)*(ll)(hole[i].x-hole[j].x)>=(ll)(hole[i].y-hole[j].y)*(ll)(hole[i].y-hole[j].y)+(ll)(hole[i].z-hole[j].z)*(ll)(hole[i].z-hole[j].z))return true;
  23. else return false;
  24. }
  25. inline void insert(int x,int y,int z)
  26. {
  27. to[++e]=y;
  28. nex[e]=beg[x];
  29. beg[x]=e;
  30. w[e]=z;
  31. }
  32. inline void Build()
  33. {
  34. for(register int i=;i<=n;++i)
  35. for(register int j=i+;j<=n;++j)
  36. if(connect(i,j))insert(i,j,),insert(j,i,);
  37. for(register int i=;i<=n;++i)
  38. if(hole[i].z-r<=)insert(s,i,);
  39. for(register int i=;i<=n;++i)
  40. if(hole[i].z+r>=h)insert(i,t,);
  41. }
  42. inline void SPFA()
  43. {
  44. for(register int i=;i<=t;++i)d[i]=inf;
  45. queue<int> q;
  46. q.push(s);
  47. p[s]=;
  48. d[s]=;
  49. while(!q.empty())
  50. {
  51. int x=q.front();
  52. q.pop();
  53. p[x]=;
  54. for(register int i=beg[x];i;i=nex[i])
  55. if(d[to[i]]>d[x]+w[i])
  56. {
  57. d[to[i]]=d[x]+w[i];
  58. if(!p[to[i]])
  59. {
  60. p[to[i]]=;
  61. q.push(to[i]);
  62. }
  63. }
  64. }
  65. }
  66. inline void init()
  67. {
  68. e=;
  69. memset(beg,,sizeof(beg));
  70. memset(p,,sizeof(p));
  71. }
  72. int main()
  73. {
  74. freopen("cheese.in","r",stdin);
  75. freopen("cheese.out","w",stdout);
  76. read(T);
  77. while(T--)
  78. {
  79. init();
  80. read(n);read(h);scanf("%lld",&r);
  81. s=n+,t=n+;
  82. for(register int i=;i<=n;++i)read(hole[i].x),read(hole[i].y),read(hole[i].z);
  83. Build();
  84. SPFA();
  85. if(d[t]<inf)printf("Yes\n");
  86. else printf("No\n");
  87. }
  88. return ;
  89. }

NOIP2017 奶酪

【比赛】NOIP2017 奶酪的更多相关文章

  1. noip2017奶酪

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

  2. [洛谷P3958] NOIP2017 奶酪

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

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

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

  4. P2498 [SDOI2012]拯救小云公主

    \(\color{#0066ff}{ 题目描述 }\) 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只bos ...

  5. NOIP2017普及组比赛总结

    期中考总结&NOIP2017总结 2017年11月11日,我第二次参加NOIP普及组复赛.上一年,我的得分是250分,只拿到了二等奖.我便把目标定为拿到一等奖,考到300分以上. 早上8点多, ...

  6. NOIP2017提高组day2T1题解(奶酪)

    题目链接:奶酪 这道题还是很水的,在下拿了满分. 并没有用什么高级的算法,我讲一下基本思路. 我们把每个洞都视为一个节点. 我们读入相关数据后,就先进行预处理,通过每个节点的信息和题目的规定,建立一张 ...

  7. 【比赛】NOIP2017 宝藏

    这道题考试的时候就骗了部分分.其实一眼看过去,n范围12,就知道是状压,但是不知道怎么状压,想了5分钟想不出来就枪毙了状压,与AC再见了. 现在写的是状压搜索,其实算是哈希搜索,感觉状压DP理解不了啊 ...

  8. 【比赛】NOIP2017 逛公园

    考试的时候灵光一闪,瞬间推出DP方程,但是不知道怎么判-1,然后?然后就炸了. 后来发现,我只要把拓扑和DP分开,中间加一个判断,就AC了,可惜. 看这道题,我们首先来想有哪些情况是-1:只要有零环在 ...

  9. 【比赛】NOIP2017 时间复杂度

    恶心的模拟题,考场上犯了一堆错误,多组数据清空没清完.数组开小...民间都是50分,结果CCF90.. 考完后随便改改就过了,还好只少了10分,如果真的是50,我估计会疯掉. 因为考场的时候没写好,所 ...

随机推荐

  1. Python学习之路:一天搞定基础部分

    ~代表省略的内容,如变量名.字符串等等 1.Pyhton中比较特别的运算: **:代表指数运算,例如2**3 = 8 //:代表整除运算,这一点和Java不同 2.Python的注释: #:单行注释 ...

  2. 从python容器中随机选取元素

    # 1.使用python random模块的choice方法随机选择某个元素 import random foo = ['a', 'b', 'c', 'd', 'e'] from random imp ...

  3. 零基础学Python之结构化数据(附详细的代码解释和执行结果截图)

    3结构化数据 字典(查找表).集合.元组.列表 3.1字典 是有两列任意多行的表,第一列存储一个键,第二列存储一个值. 它存储键/值对,每个唯一的键有一个唯一与之关联的值.(类似于映射.表) 它不会维 ...

  4. 如何在多机架(rack)配置环境中部署cassandra节点

    cassandra节点上数据的分布和存储是由系统自动完成的.除了我们要设计好partition key之外,在多机架(rack)配置环境中部署cassandra节点,也需要考虑cassandra分布数 ...

  5. 【Unity】 Cursor学习

    CursorLockMode.None 光标行为未修改,第一人称视角下鼠标可以突破窗口. CursorLockMode.Locked 光标锁定到游戏窗口的中心,与全屏与否无关,同时隐藏光标(这一点在3 ...

  6. Windows下的ROUGE文本测评工具基本安装

    需要的安装包: rouge1.5.5:https://pan.baidu.com/s/1B7-LYn1lZKC8f51yXxNK9w Strawberry Perl :http://strawberr ...

  7. 使用C#把Tensorflow训练的.pb文件用在生产环境

    训练了很久的Tf模型,终于要到生产环境中去考研一番了.今天花费了一些时间去研究tf的模型如何在生产环境中去使用.大概整理了这些方法. 继续使用分步骤保存了的ckpt文件 这个貌似脱离不了tensorf ...

  8. nohup命令详解

    基础命令学习目录首页 原文链接:https://blog.csdn.net/hfismyangel/article/details/80258126 1.nohup 用途:不挂断地运行命令. 语法:n ...

  9. ansible使用1

    常用软件安装及使用目录   ansible软件2 ### ansible软件部署安装需求#### 01. 需要有epel源 系统yum源(base epel--pip gem) sshpass---e ...

  10. Docker容器和本机之间的文件传输 使用Docker部署Tomcat项目

    Docker容器和本机之间的文件传输. http://blog.csdn.net/leafage_m/article/details/72082011 使用Docker部署Tomcat项目 http: ...