1,2,4测试点WA,样例通过
#include<iostream>
#include<cstdio>
#include<cstring>
#define ull unsigned long long
#define ll long long
#define N 1005
using namespace std;
ll x[N],y[N],z[N];
ll f_top[N],f_button[N];
int idx_top,idx_button;
int t,n,h;
ll r;
int father[N];
inline int findfather(int x){//查
if(father[x]!=x)
father[x]=findfather(father[x]);
return father[x];
}
inline void unionn(int x,int y){//并
int a=findfather(x),b=findfather(y);
if(a!=b)
father[a]=b;
}
inline bool check(int x,int y){//判
return findfather(x)==findfather(y);
}
inline ll dis(ll x1,ll y1,ll z1,
ll x2,ll y2,ll z2){//距离
return (x1-x2)*(x1-x2)+
(y1-y2)*(y1-y2)+
(z1-z2)*(z1-z2);
}
void build(int n){//初始化并查集
for(int i=1;i<=n;i++)
father[i]=i;
}
int main(){
cin>>t;
while(t--){
cin>>n>>h>>r;
build(n);
idx_top=idx_button=0;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i]>>z[i];
if(z[i]+r>=h){
f_top[++idx_top]=i;
}
else if(z[i]-r<=0){
f_button[++idx_button]=i;
}
for(int j=1;j<=i;j++){
if((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])>4*r*r){//防止爆炸
continue;
}
if(dis(x[i],y[i],z[i],x[j],y[j],z[j])<=4*r*r){
unionn(i,j);
}
}
}
bool res=0;
for(int i=1;i<=idx_top;i++){
for(int j=1;j<=idx_button;j++){
if(check(f_top[i],f_button[j])){
res=1;
break;
}
}
if(res){
break;
}
}
if(res){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
return 0;
}