题解
2025-03-04 20:39:34
发布于:广东
1阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1005;
bool f[N][N],vis[N];
int T,n;
ll x[N],y[N],z[N],h,r;
ll sqr(ll x){
return x*x;
}
int main(){
cin>>T;
while(T--){
cin>>n>>h>>r;
memset(f,0,sizeof(f));
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++) cin>>x[i]>>y[i]>>z[i];
for(int i=1;i<=n;i++){
if(z[i]<=r) f[0][i]=f[i][0]=1;
if(z[i]>=h-r) f[n+1][i]=f[i][n+1]=1;
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(sqr(x[i]-x[j])+sqr(y[i]-y[j])+sqr(z[i]-z[j])<=r*r*4){
f[i][j]=f[j][i]=1;
}
}
}
queue<int> q;
q.push(0);
vis[0]=1;
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=1;i<=n+1;i++){
if(f[u][i]&&!vis[i]){
q.push(i);
vis[i]=1;
}
}
}
if(vis[n+1]) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
这里空空如也
有帮助,赞一个