zoukankan      html  css  js  c++  java
  • POJ 2236 Wireless Network(并查集)

    题目链接[kuangbin带你飞]专题五 并查集 A - Wireless Network

    题意

    有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能。若两台电脑能相互通信。则有两种情况。一是他们之间的距离小于d。二是他们能够借助都可到达的第三台已修复的电脑。给出全部电脑的坐标位置,对其进行两种可能的操作,O x表示修复第x台。S x y表示推断x y之间是否能通信,若能输出SUCCESS,否则输出FALL。

    思路

    用并查集来保存电脑互相的连通情况。
    每次修好电脑后,将它能够通信的电脑(距离满足且已修好)与它进行连通。

    代码

    #include<iostream>
    #include<stdio.h>
    #include<cstring>
    #include<cstdlib>
    #include<vector>
    #include<algorithm>
    #define LL long long
    using namespace std;
    
    const int N = 1009;
    int x[N], y[N], fa[N];
    bool p[N];
    vector<int> v[N];
    
    int find(int x)
    {
        if(fa[x] == x)
            return x;
        return fa[x] = find(fa[x]);
    }
    
    int main()
    {
        int n, d;
        char s[2];
        scanf("%d%d", &n, &d);
        for(int i=1; i<=n; i++)
        {
            scanf("%d%d", &x[i], &y[i]);
            fa[i] = i;
        }
        for(int i=1; i<=n; i++)
            for(int j=i+1; j<=n; j++)
            {
                if(((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])) <= d*d)
                {
                    v[j].push_back(i);
                    v[i].push_back(j);
                }
            }
        while(~scanf("%s", s))
        {
            int a, b;
            if(s[0] == 'O')
            {
                scanf("%d", &a);
                p[a] = true;
                for(int i=0; i<v[a].size(); i++)
                    if(p[v[a][i]])
                    {
                        b = find(v[a][i]);
                        fa[b] = a;
                    }
            }
            else
            {
                scanf("%d%d", &a, &b);
                int ta = find(a);
                int tb = find(b);
                if(ta == tb)
                    printf("SUCCESS
    ");
                else
                    printf("FAIL
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    修改SharePoint 2013中item Created by 信息
    用powershell批量新增user profile
    如何发一封回复的时候收件人和发件人不同的邮件
    SharePoint 2013配置 Workflow Manager
    正则表达式
    go
    HTML5
    js-example
    css3
    jquery-example
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7263975.html
Copyright © 2011-2022 走看看