奶酪

陈子骏

2018-04-02 17:42:25

Personal

``` // luogu-judger-enable-o2 #include<iostream> #include<algorithm> #include<cstring> #include<string> #include<cstdio> #include<cmath> using namespace std; int t; int f[1001]; double dis(long long x,long long y,long long z,long long x1,long long y1,long long z1){ return sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)+(z-z1)*(z-z1)); } int find(int x) { if(x==f[x])return x; else { x=f[x]; return find(f[x]); } } long long x[100001],y[100001],z[100001]; int f1[100001],f2[100001]; int main() { scanf("%d",&t); for(int j=1;j<=t;j++) { int n,h; long long r; int tot1=0,tot2=0; scanf("%d%d%ld",&n,&h,&r); for(int i=1;i<=n;i++)f[i]=i; for(int i=1;i<=n;i++) { scanf("%ld%ld%ld",&x[i],&y[i],&z[i]); if(z[i]+r>=h){ tot1++; f1[tot1]=i; } if(z[i]-r<=0) { tot2++; f2[tot2]=i; } for(int k=1;k<=i;k++) { if (dis(x[i],y[i],z[i],x[k],y[k],z[k])<=2*r){ int a1=find(i); int a2=find(k); if (a1!=a2)f[a1]=a2;} } } int s=0; for (int i=1;i<=tot1;i++) { for (int k=1;k<=tot2;k++){ if (find(f1[i])==find(f2[k])){ s=1;break; } } if (s==1) break; } if (s==1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } } ```