• POJ 2236 Wireless Network(并查集)


    解题思路:这是并查集的应用,如果是O就合并,else就查询,需要注意的是join有个条件,就是在d的距离之内才可以!!!

    AC代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    #define N 1110
    
    int d;
    bool used[N];
    struct node
    {
        int pre,x,y;
    }p[N];
    int find(int x)
    {
        return x==p[x].pre?x:find(p[x].pre);
    }
    void join(const node p1,const node p2)
    {
        int root1,root2;
        root1=find(p1.pre);
        root2=find(p2.pre);
        if (root1!=root2)
        {
            if ((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)<=d*d)
            {
                p[root2].pre=root1;
            }
        }
    }
    int main()
    {
        int num;
        int ok;
        int from,to;
        cin>>num>>d;
        for (int i=1;i<=num;i++)
        {
            p[i].pre=i;
        }
        memset(used,0,sizeof(used));
        for (int i=1;i<=num;i++)
        {
            cin>>p[i].x>>p[i].y;
        }
        string ope;
        while(cin>>ope)
        {
            if (ope=="O")
            {
                cin>>ok;
                used[ok]=true;
                for (int i=1;i<=num;i++)
                {
                    if (used[i]&&i!=ok)
                        join(p[i],p[ok]);
                }
            }else
            {
                scanf("%d%d", &from, &to);
                if(find(from) == find(to))
                    printf("SUCCESS
    ");
                else
                    printf("FAIL
    ");
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    IOI2000 回文字串
    洛谷 P2758 编辑距离
    NOIP2012普及第三题 摆花
    [SCOI2005]骑士精神
    [USACO1.5]八皇后 Checker Challenge
    Codeforces Round #637 (Div. 2) 题解
    核电站---两种DP解法
    POJ1077 八数码问题
    洛谷 P1162 填涂颜色
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/s1124yy/p/5520993.html
Copyright © 2020-2023  润新知