50分求调
查看原帖
50分求调
992348
0928_14楼主2023/7/18 18:12
#include<bits/stdc++.h>
#define ll long long
using namespace std;
    ll t,n,h,r,a1,a2;
    ll x[1000+10],y[1000+10],z[1000+10];
    ll F[2000+10];
    ll sum1[1000+10],sum2[1000+10];
    int G(int x)
    {
        if(F[x]!=x)F[x]=G(F[x]);
        return F[x];
    }
    void HB(int x,int y)
    {
        F[G(x)]=G(y);
        return;
    }
    bool check(int a,int b)
    {
    //  cout<<a<<" "<<b;
        ll s1=(x[a]-x[b])*(x[a]-x[b]);
    //  cout<<s1<<" ";
        ll s2=(y[a]-y[b])*(y[a]-y[b]);
    //  cout<<s2<<" ";
        ll s3=(z[a]-z[b])*(z[a]-z[b]);
    //  cout<<s3<<" ";
        ll sum=labs((s1+s2+s3));
    //  cout<<sum<<"\n";
        return sum<=(4*r*r);
    }
int main(){
    scanf("%d",&t);
    while(t--)
    {
        a1=a2=0;
        for(int i=0;i<=n+1;i++)
        {
            F[i]=i;
        }
        scanf("%lld%lld%lld",&n,&h,&r);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
        }
        for(int i=1;i<=n;i++)
        {
            if(z[i]<=r)
            {
                sum1[++a1]=i;
            }
            if(z[i]+r>=h)
            {
                sum2[++a2]=i;
            }
        //  cout<<z[i]-r<<" "<<z[i]+r<<"\n";
        }
    //  cout<<n<<" ";
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                if(check(i,j))HB(i,j);
            }
        }
        bool bj=true;
        //cout<<a1<<" "<<a2<<"\n";
        for(int i=1;i<=a1;i++)
        {
            for(int j=1;j<=a2;j++)
            {
                if(G(sum1[i])==G(sum2[j]))
                {
                    bj=false;
                    break;
                }
                //cout<<G(sum1[i])<<" "<<G(sum2[j])<<" "<<bj<<"\n";
            }
            if(!bj)break;
        }
        if(!bj)cout<<"Yes\n";
        else cout<<"No\n";
    }

return 0;
}
2023/7/18 18:12
加载中...