Processing math: 100%

洛谷 P3958 奶酪

[TOC]

###题目
P3958 奶酪
###思路
并查集。将奶酪的下表面设为0号,输入空洞位置时判断该空洞如果与下表面相切或相交就和到一个集合里,最后找到与上表面相切或相交的空洞判断与0号是否在一个集合里。
###Code

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<cmath> #include<algorithm> #define MAXN 1001 #define rr register #define int long long using namespace std; int t,n,h,r,fa[MAXN]; int x[MAXN],y[MAXN],z[MAXN]; int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]); } inline void read(int &T){ int x=0;bool f=0;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} T=f?-x:x; } inline double dist(int a,int b){ return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])+(z[a]-z[b])*(z[a]-z[b])); } signed main(){ read(t); while(t--){ read(n),read(h),read(r); for(rr int i=0;i<=MAXN;++i) fa[i]=i; for(rr int i=1;i<=n;++i){ read(x[i]),read(y[i]),read(z[i]); if(z[i]-r<=0){ fa[i]=0; } } for(rr int i=1;i<=n;++i){ for(rr int j=1;j<=n;++j){ if(find(i)!=find(j)&&dist(i,j)<=(2*r)){ fa[find(i)]=find(j); } } } bool f=0; for(rr int i=1;i<=n;++i){ if(z[i]+r>=h&&find(0)==find(i)){ puts("Yes"); f=1; break; } } if(!f) puts("No"); } return 0; }
posted @   yu__xuan  阅读(242)  评论(0编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 用 C# 插值字符串处理器写一个 sscanf
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开