#include <iostream>
#include <cmath>
using namespace std;
int T,n,h,r;
struct node{long long int x,y,z,pre;}N[20001];
bool touch(node x,node y){return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y)+(x.z-y.z)*(x.z-y.z))<=(double)(2*r);}
int find(int x){
if(N[x].pre==x) return x;
return N[x].pre=find(N[x].pre);
}
void merge(int x,int y){
int fx=find(x),fy=find(y);
if(fx!=fy) N[fx].pre=fy;
return;
}
int main(int argc, char** argv) {
cin>>T;
while(T--){
cin>>n>>h>>r;
int up=0,down=0;
int Up[20001],Down[20001];
for(int i=0;i<n;i++){
cin>>N[i].x>>N[i].y>>N[i].z;
N[i].pre=i;
if(N[i].z+r>=h){
Up[up]=i;
up++;
}
if(N[i].z-r<=0){
Down[down]=i;
down++;
}
for(int j=0;j<i;j++) if(touch(N[j],N[i])) merge(j,i);
}
bool flag=false;
for(int i=0;i<up;i++){
for(int j=0;j<down;j++){
if(N[Up[i]].pre==N[Down[j]].pre){
flag=true;
break;
}
}
if(flag) break;
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
第六个和第七个点错了QAQ
WA的一声哭了出来。