@[foxifigo0](/user/393076) 锅有一点点多,这里直接给代码了
```cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n[24],h[24],r[24],x[20002],y[20002],z[20002];
int f[20020];
vector<int> out[2];
int find(int k){
if(f[k] == k)return k;
return f[k] =find(f[k]);
}
int pp(int x){
return x * x;
}
signed main(){
cin >> t;
for(int k = 0;k < t;k++){
bool ye = 1;
while(!out[0].empty()){
out[0].pop_back();
}
while(!out[1].empty()){
out[1].pop_back();
}
cin >> n[k] >> h[k] >> r[k];
for(int j = 0;j < n[k];j++){
f[j] = j;
}
for(int i = 0;i < n[k];i++){
cin >> x[i] >> y[i] >> z[i];
if(z[i] + r[k] >= h[k] && z[i] - r[k] <= 0&& ye){
cout << "Yes" << endl;
ye = 0;
}
if(z[i] - r[k] <= 0){
out[0].push_back(i);
}
else if(z[i] + r[k] >= h[k]){
out[1].push_back(i);
}
}
for(int i = 0;i < n[k];i++){
for(int j = 0;j < n[k];j++){
if(pp(x[i] - x[j]) + pp(y[i] - y[j]) + pp(z[i] - z[j]) <= pp(2*r[k])){
f[find(i)] = find(j);
}
}
}
for(int i = 0;i < out[0].size();i++){
for(int j = 0;j < out[1].size();j++){
if(find(out[0][i]) == find(out[1][j]) && ye){
cout << "Yes" << endl;
ye = 0;
}
}
}
if(ye){
cout << "No" << endl;
}
}
}
```
by Liuyuzhuo @ 2022-07-27 11:37:36
@[Liuyuzhuo](/user/221575)
谢谢大佬!
by TLE_ @ 2022-07-29 11:00:38