洛谷 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
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;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 用 C# 插值字符串处理器写一个 sscanf
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!