首页 > 其他 > 详细

【NOIP2017】奶酪

时间:2018-10-21 21:21:31      阅读:169      评论:0      收藏:0      [点我收藏+]

题面

现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多 半径相同 的球形空洞。我们可以在这块奶酪中建立空间坐标系,在坐标系中,奶酪的下表面为z = 0,奶酪的上表面为z = h。
现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐标。两相切或是相交,则 Jerry 可以从其中一个空洞跑到另一个,特别地,如果一个空洞与下表面相切或是相交,Jerry 则可以从奶酪下表面跑进空洞;如果一个空洞与上表面相切或是相交,Jerry 则可以从空洞跑到奶酪上表面。
位于奶酪下表面的 Jerry 想知道,在 不破坏奶酪 的情况下,能否利用已有的空洞跑到奶酪的上表面去?

分析

去年不会,真的是因为去年那个时候还没学并查集,然后我是没看出来怎么跑spfa的,但是并查集很显然。

怕爆int 给h和r也开了个double 刚刚做WA了一发,因为我把初始化fa写在了输入n之前,我怎么这么菜啊。

代码

 从这一篇起换了一种风格,23333

  1. #include<bits/stdc++.h>  
  2. using namespace std;  
  3. #define N 1010  
  4. struct email  
  5. {  
  6.     double x,y,z;  
  7. }p[N];  
  8. int t,n;  
  9. double h,r;  
  10. int fa[N];  
  11. inline int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}  
  12. inline double dis(email p1,email p2)  
  13. {return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)+(p1.z-p2.z)*(p1.z-p2.z));}  
  14. inline void combine(int x,int y)  
  15. {  
  16.     int fax=find(x),fay=find(y);  
  17.     if(fax!=fay)fa[fax]=fay;  
  18. }  
  19. int main()  
  20. {  
  21.     scanf("%d",&t);  
  22.     while(t--)  
  23.     {  
  24.         scanf("%d%lf%lf",&n,&h,&r);  
  25.         for(int i=1;i<=n+2;i++)fa[i]=i;  
  26.         for(int i=1;i<=n;i++)  
  27.         {  
  28.             scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z);  
  29.             if((p[i].z<=r&&p[i].z>=0)||(-p[i].z<=r&&p[i].z<=0))combine(n+1,i);  
  30.             if((p[i].z<=h+r&&p[i].z>=h)||(-p[i].z<=r-h&&p[i].z<=h))combine(n+2,i);  
  31.         }  
  32.         for(int i=1;i<=n;i++)  
  33.             for(int j=i+1;j<=n;j++)  
  34.                 if(dis(p[i],p[j])<=2*r)combine(i,j);  
  35.         if(find(n+1)==find(n+2))printf("Yes\n");  
  36.         else printf("No\n");          
  37.     }  
  38. }  

【NOIP2017】奶酪

原文:https://www.cnblogs.com/NSD-email0820/p/9826630.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!