zoukankan      html  css  js  c++  java
  • POJ2236-Wireless Network-并查集

    模板题

    对于每修复一台终端,就遍历所有其他已修复的终端,如果距离在d之内,就union。

    之后看是否在一个并查集中。

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    int N,D,pos[1010][2],rp[1010];
    int fa[1010];
    
    int Find(int x)
    {
        int r = x;
        while(r != fa[r])
            r = fa[r];
        int i=x,j;
        while(fa[i] != r)
        {
            j = fa[i];
            fa[i] = r;
            i = j;
        }
        return r;
    }
    
    void Union(int x,int y)
    {
        int fx = Find(x),fy = Find(y);
        if(fx != fy)
            fa[fy] = fx;
    }
    
    int dis(int x,int y)
    {
        return abs(pos[x][0]-pos[y][0])*abs(pos[x][0]-pos[y][0])+abs(pos[x][1]-pos[y][1])*abs(pos[x][1]-pos[y][1]);
    }
    
    int main()
    {
        scanf("%d%d",&N,&D);
        for(int i=1;i<=N;i++)
        {
            scanf("%d%d",&pos[i][0],&pos[i][1]);
            fa[i] = i;
        }
        char op[5];
        int p,q;
        while(~scanf("%s",op))
        {
            if(op[0] == 'O')
            {
                scanf("%d",&p);
                rp[p] = 1;
                for(int i=1;i<=N;i++)if(i!=p &&rp[i]&&dis(i,p)<=D*D)
                {
                    Union(i,p);
                    //printf("link %d %d
    ",i,p);
                }
            }
            else if(op[0] == 'S')
            {
                scanf("%d%d",&p,&q);
                if(rp[p] && rp[q] && Find(p) == Find(q)) printf("SUCCESS
    ");
                else printf("FAIL
    ");
            }
        }
    }
  • 相关阅读:
    前后端分离实践 — 如何解决跨域问题
    bower 和 npm 的区别详细介绍
    yeoman-bower-grunt之间的关系
    软件开发环境-开发环境、测试环境、生产环境的区别
    Tomcat下配置JNDI的三种方式
    SSE
    Java动态代理
    Css之Relative
    多线程之——死锁
    JVM
  • 原文地址:https://www.cnblogs.com/helica/p/5176585.html
Copyright © 2011-2022 走看看