80pts WA on #8 & #10
#include<bits/stdc++.h>
#define int long long
using namespace std;
double T , n , h , r , bcj[1005] , under[1005] , up[1005] ;
double dist( int x1 , int yy , int z1 , int x2 , int y2 , int z2 ){
return sqrt( pow( x1 - x2 , 2 ) + pow( yy - y2 , 2 ) + pow( z1 - z2 , 2 ) ) ;
}
int find( int x ){
if( bcj[x] == x ) return x ;
bcj[x] = find( bcj[x] ) ;
return bcj[x] ;
}
signed main(){
cin >> T ;
while( T -- ){
int x[1005] , y[1005] , z[1005] ;
cin >> n >> h >> r ;
for( int i = 1 ; i <= n ; i ++ ){
cin >> x[i] >> y[i] >> z[i] ;
if( z[i] - r <= 0 ){
under[i] = true ;
}
else under[i] = false ;
if( z[i] + r >= h ){
up[i] = true ;
}
else up[i] = false ;
}
for( int i = 1 ; i <= n ; i ++ ){
bcj[i] = i ;
}
for( int i = 1 ; i <= n ; i ++ ){
for( int j = i + 1 ; j <= n ; j ++ ){
int res = dist( x[i] , y[i] , z[i] , x[j] , y[j] , z[j] ) ;
if( res <= 2 * r ){
bcj[find( j )] = find( i ) ;
}
}
}
int get = false ;
for( int i = 1 ; i <= n ; i ++ ){
for( int j = 1 ; j <= n ; j ++ ){
if( under[i] && up[j] && find( i ) == find( j ) ){
cout << "Yes\n" ;
get = true ;
break;
}
}
if( get ) break;
}
if( get == false ){
cout << "No\n" ;
}
}
return 0 ;
}