```cpp
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t,n,h,r,a1,a2;
ll x[1000+10],y[1000+10],z[1000+10];
ll F[2000+10];
ll sum1[1000+10],sum2[1000+10];
int G(int x)
{
if(F[x]!=x)F[x]=G(F[x]);
return F[x];
}
void HB(int x,int y)
{
F[G(x)]=G(y);
return;
}
bool check(int a,int b)
{
// cout<<a<<" "<<b;
ll s1=(x[a]-x[b])*(x[a]-x[b]);
// cout<<s1<<" ";
ll s2=(y[a]-y[b])*(y[a]-y[b]);
// cout<<s2<<" ";
ll s3=(z[a]-z[b])*(z[a]-z[b]);
// cout<<s3<<" ";
ll sum=labs((s1+s2+s3));
// cout<<sum<<"\n";
return sum<=(4*r*r);
}
int main(){
scanf("%d",&t);
while(t--)
{
a1=a2=0;
scanf("%lld%lld%lld",&n,&h,&r);
for(int i=0;i<=n+1;i++)
{
F[i]=i;
}
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
}
for(int i=1;i<=n;i++)
{
if(z[i]<=r)
{
sum1[++a1]=i;
}
if(z[i]+r>=h)
{
sum2[++a2]=i;
}
// cout<<z[i]-r<<" "<<z[i]+r<<"\n";
}
// cout<<n<<" ";
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++)
{
if(check(i,j))HB(i,j);
}
}
bool bj=true;
//cout<<a1<<" "<<a2<<"\n";
for(int i=1;i<=a1;i++)
{
for(int j=1;j<=a2;j++)
{
if(G(sum1[i])==G(sum2[j]))
{
bj=false;
break;
}
//cout<<G(sum1[i])<<" "<<G(sum2[j])<<" "<<bj<<"\n";
}
if(!bj)break;
}
if(!bj)cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}
```
F[]数组初始化要放在输入n后面,不然有的值会为0
by chenjliang @ 2023-07-18 19:04:34
@[chenjliang](/user/560771) 谢谢调整
by 0928_14 @ 2023-07-19 07:17:59