• poj 2236 Wireless Network(并查集)


    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<cmath>
    using namespace std;
    struct Node
    {
        double x,y;
    };
    Node node[1100];
    int vis[1100];
    double mat[1005][1005];
    int fa[1005];
    
    int find(int x)
    {
        return fa[x]==x?x:find(fa[x]);
    }
    
    void bin(int x,int y)
    {
        int fx=find(x);
        int fy=find(y);
    
        if(fx!=fy)
        {
            fa[fx]=fa[fy];
        }
    }
    
    
    
    int main()
    {
        int n,m;
        int i,j,k;
        int x,y;
        int f,t;
        double d;
        char str[10];
        memset(vis,0,sizeof(vis));
        memset(mat,-1,sizeof(mat));
    
        scanf("%d%lf",&n,&d);
        for(i=0;i<=n;i++)
        {
            fa[i]=i;
        }
    
        for(i=1;i<=n;i++)
        {
            scanf("%lf%lf",&node[i].x,&node[i].y);
        }
        for(i=1;i<=n;i++)
        {
            for(j=i+1;j<=n;j++)
            {
                double tx=fabs(node[i].x-node[j].x);
                double ty=fabs(node[i].y-node[j].y);
                //printf("%.2f %.2f
    ",tx,ty);
                double len=sqrt(tx*tx+ty*ty);
                if(len<=d)
                     mat[i][j]=mat[j][i]=len;
                else mat[i][j]=mat[j][i]=-1;
                //printf("%.2f %.2f
    ",len,mat[i][j]);
            }
        }
        /*
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                printf("%.2lf ",mat[i][j]);
            }
            printf("
    ");
        }*/
    
        while(scanf("%s",str)!=EOF)
        {
            if(str[0]=='O')
            {
                scanf("%d",&x);
                vis[x]=1;
                for(i=1;i<=n;i++)
                {
                    if(vis[i]==1&&mat[x][i]!=-1)
                    {
                        bin(x,i);
                    }
                }
            }
            else if(str[0]=='S')
            {
                scanf("%d%d",&x,&y);
                if(find(x)==find(y))
                {
                    printf("SUCCESS
    ");
                }
                else printf("FAIL
    ");
            }
        }
    
    
        return 0;
    }
    
  • 相关阅读:
    Linux账户密码安全策略设置 /etc/login.defs:
    GPS网络时间服务器安装注意事项
    ntp时间校准服务器的调试方法
    北斗网络时钟服务器的特点
    sntp时间服务器的介绍
    网络校时服务器
    综合时间码分配器介绍
    子母钟系统介绍
    智能计数器简介
    怎样选择通用计数器?
  • 原文地址:https://www.cnblogs.com/sola1994/p/4693015.html
Copyright © 2020-2023  润新知