题面
样例数据
AC_Code
#include <bits/stdc++.h>
#include <vector>
#include <stack>
#define ll long long
#define db double
const int N=1010;
const int M=10100;
using namespace std;
unsigned long long t,n,r,h;
bool vis[N], jude;
int f[N];
struct node{
double x,y,z;
}hole[M];
bool got(node a, node b) {
ll depth;
depth = pow((a.x-b.x),2) + pow((a.y-b.y),2) + pow((a.z-b.z),2);
if(depth<=4*r*r) return true;
else return false;
}
void dfs(int i)
{
if(jude) return ;
if(hole[i].z+r>=h) {
jude=1; return ;
}
for(int j=1; j<=n; j++) {
if(got(hole[i], hole[j]) && !vis[j]) {
vis[j]=1; dfs(j);
}
}
}
int main()
{
scanf("%d",&t);
for(int i=1; i<=t; i++)
{
scanf("%d %d %d",&n,&h,&r);
memset(vis, 0, sizeof(vis));
jude=0;
for(int j=1; j<=n; j++)
scanf("%lf %lf %lf",&hole[j].x,&hole[j].y,&hole[j].z);
for(int k=1;k<=n;k++)
if(hole[k].z<=r) {
vis[k]=1; dfs(k);
}
if(jude)
cout<<"Yes"<<endl;
else
printf("No\n");
}
}