RT,快疯了
#include<bits/stdc++.h>
using namespace std;
int t,n,h,r,x[10005],y[10005],z[10005],father[10005];
inline int read()
{
char ch=getchar();int x=0,f=1;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void init()
{
for(int i=0;i<=n+1;i++)
{
father[i]=i;
}
}
int find(int a)
{
if(father[a]==a)
{
return a;
}
else
{
father[a]=find(father[a]);
return father[a];
}
}
void Union(int a,int b)
{
if(find(a)!=find(b))
{
father[find(a)]=find(b);
}
}
bool pd1(int a,int b)
{
if(find(a)!=find(b))
return ((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])+(z[a]-z[b])*(z[a]-z[b])<4*r*r)?true:false;
return false;
}
bool pd2(int a,int b)
{
if(find(a)!=find(b))
{
if(b==0)
return (abs(z[a])<=r)?true:false;
if(b==n+1)
return (z[a]+r>=h)?true:false;
}
return false;
}
int main()
{
t=read();
for(int i=1;i<=t;i++)
{
n=read();h=read();r=read();
init();
for(int j=1;j<=n;j++)
{
x[j]=read();y[j]=read();z[j]=read();
for(int k=0;k<=n+1;k++)
{
if(j!=k&&pd1(j,k)&&k!=0&&k!=n+1)
{
Union(j,k);
}
if((k==0||k==n+1)&&pd2(j,k))
{
Union(j,k);
}
}
}
if(find(0)==find(n+1))
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}