• POJ 2236 Wireless Network


    算起来是个并查集问题。


    题意是说 有N台电脑。每台电脑能以自身为中心连接D米范围的电脑。

    给出N台电脑坐标,针对询问操作。输出是否连通。


    我用邻接表存储的,假设两电脑坐标 距离小于他们半径和,存起来。表明这两个点能够连通。

    用 online[] 表明是否被修复。 修复之后才干够用并查集合并。

    修复操作就启用 online,然后遍历这个点的邻接边,假设也有online 的,就合并。

    之后就是针对询问 输出。

    在一个集合就SUCCESS


    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<stack>
    #include<iostream>
    #include<list>
    #include<set>
    #include<cmath>
    #define INF 0x7fffffff
    #define eps 1e-6
    using namespace std;
    int n;
    double r;
    vector<int>g[1001];
    int fa[1001];
    bool online[1001];
    struct node
    {
        double x,y;
    } point[1001];
    int father(int x)
    {
        if(x!=fa[x])
            return fa[x]=father(fa[x]);
    }
    double getlen(node a,node b)
    {
        double len=sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
        return len-r;
    }
    int main()
    {
        scanf("%d%lf",&n,&r);
    
        for(int i=1; i<=n; i++)
            scanf("%lf%lf",&point[i].x,&point[i].y);
    
        for(int i=1; i<=n; i++)
            fa[i]=i,g[i].clear();
        int cot=0;
        for(int i=1; i<=n; i++)
            for(int j=i+1; j<=n; j++)
            {
                double len=getlen(point[i],point[j]);
                if(len<=0)
                {
                    g[i].push_back(j);
                    g[j].push_back(i);
                }
            }
    
        memset(online,0,sizeof(online));
        char str[10];
        while(scanf("%s",str)!=EOF)
        {
            if(str[0]=='S')
            {
                int a,b;
                scanf("%d%d",&a,&b);
                if(father(a)!=father(b))
                    puts("FAIL");
                else
                    puts("SUCCESS");
            }
            else if(str[0]=='O')
            {
                int u;
                scanf("%d",&u);
                online[u]=1;
                for(int j=0; j<g[u].size(); j++)
                {
    
                    int v=g[u][j];
                    if(!online[v])continue;
                    v=father(v);
                    if(u==v)continue;
                    fa[v]=u;
                }
            }
        }
    }
    


  • 相关阅读:
    appium 环境安装windows
    解决windows7无法连接CentOS7系统中oracle问题:ORA-12514 TNS 监听程序当前无法识别
    linux系统(CentOS7)虚拟机上安装oracle 11g,解决oracle图形界面卡住无法点击next问题
    python自动化测试框架学习
    VSCode + GDBServer 远程调试C/C++流水账
    IDEA 16注册
    VS2008非托管C++调用wcf(WebService)服务
    python 从数据库表生成model
    2015年工作总结
    dlib库学习之一
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7252417.html
Copyright © 2020-2023  润新知