RT
好人一生平安。。。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll T, n, h, r, p2[1005], k;
ll fa[1005], p1[1005], tot1, tot2;
struct data {
ll x, y, z;
}f[1005];
ll check(ll a, ll b) {
if(((f[b].x - f[a].x) * (f[b].x - f[a].x) + (f[b].y - f[a].y) * (f[b].y - f[a].y) + (f[b].z - f[a].z) * (f[b].z - f[a].z)) > k)
return 0;
else return 1;
}
int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
int main() {
scanf("%lld", &T);
while(T--) {
memset(p1, 0, sizeof(p1));
memset(p2, 0, sizeof(p2));
tot1 = 0; tot2 = 0;
scanf("%lld%lld%lld", &n, &h, &r);
k = 4 * r * r;
for (int i = 1; i <= n; i++)
fa[i] = i;
for (int i = 1; i <= n; i++) {
scanf("%lld%lld%lld", &f[i].x, &f[i].y, &f[i].z);
if(f[i].z - r <= 0) p2[++tot2] = i;
if(f[i].x + r >= h) p1[++tot1] = i;
for (int j = 1; j <= i; j++)
if(check(i, j)) {
int dx = find(i);
int dy = find(j);
if(dx != dy) fa[dx] = dy;
}
}
int t = 0;
for (int i = 1; i <= tot1; i++) {
for (int j = 1; j <= tot2; j++)
if(find(p1[i]) == find(p2[j])) {
t = 1; break;
}
if(t == 1) break;
}
if(t) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}