看起来没有任何问题的代码,但是样例都过不了
#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++){
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] * t + 5;j++){
f[j] = j;
}
for(int i = 0;i < n[k];i++){
cin >> x[i] >> y[i] >> z[i];
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(j != i && sqrt(pp(x[i] - x[j]) + pp(y[i] - y[j]) + pp(x[i] - x[j]) <= 2 * r[k])){
f[find(i)] = find(j);
}
}
}
bool ye = 1;
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;
}
for(int i = 0;i < n[k] + 5;i++){
cout << f[i] << " ";
}
}
}