1 条题解

  • 0
    @ 2025-9-9 23:46:00

    C :

    #include<stdio.h>
    int p[100005];
    int find(int i)
    {
        if(p[i]!=i) p[i]=find(p[i]);
        return p[i];
    }
    int main(void)
    {
        int n,d;
        while(scanf("%d%d",&n,&d)!=EOF)
        {
            int i,a[10005],b[10005],c,e,j,x1,x2;
            for(i=1;i<=n;i++)
                p[i]=i;
            for(i=1;i<=n;i++)
                scanf("%d%d",&a[i],&b[i]);
            for(i=1;i<=n;i++)
                for(j=1;j<i;j++)
                if((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j])<=d*d)
                {
                    x1=find(i);x2=find(j);
    
                    if(x1!=x2) p[x1]=x2;
                }
            scanf("%d%d",&c,&e);
            if(find(c)==find(e)) printf("SUCCESS\n");
            else printf("FAIL\n");
        }
        return 0;
    }
    
    

    C++ :

    //4340K	3079MS
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #define M 1007
    char s[5];
    int x[M],y[M],pre[M],vis[M],g[M][M];
    int n,d;
    void init()
    {
        memset(g,0,sizeof(g));
        for(int i=1; i<=n; i++)
        {
            pre[i]=i;
            vis[i]=0;
        }
    
    }
    int find(int x)
    {
        while(x!=pre[x])
            x=pre[x];
        return x;
    }
    void unio(int a,int b)
    {
        int c=find(a);
        int d=find(b);
        pre[c]=d;
    }
    bool judge(int i,int j)
    {
        return ((y[j]-y[i])*(y[j]-y[i])+(x[j]-x[i])*(x[j]-x[i]))<=d*d;
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        while(scanf("%d%d",&n,&d)!=EOF)
        {
            init();
            int a,b,c;
            for(int i=1; i<=n; i++)
                scanf("%d%d",&x[i],&y[i]);
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    if(i!=j&&judge(i,j))
                        unio(i,j);
            scanf("%d%d",&a,&b);
            if(find(a)==find(b))printf("SUCCESS\n");
            else printf("FAIL\n");
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    927
    时间
    2000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者