• poj 2236 Wireless Network 并查集


    链接:http://poj.org/problem?id=2236

    并查集水题,+距离约束

    题意:

    东南亚发生地震。 亚洲合作医疗队(ACM)已与膝上计算机建立了无线网络,但由于意外的余震袭击,网络中的所有计算机都被破坏了。 电脑被一一修复,网络逐渐恢复工作。 由于硬件限制,每台计算机只能直接与不超过d米的计算机通信。 但是,每台计算机都可以视为其他两台计算机之间通信的中介,也就是说,如果计算机A和计算机B可以直接通信,或者有计算机C可以同时与A和B通信,则计算机A和计算机B可以通信。 B.

    在修复网络的过程中,工作人员可以随时执行两种操作:修复计算机,或测试两台计算机是否可以通信。 您的工作是回答所有测试操作。

    刚开始所有的都是断的用vis标记下;

    code:

    
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+10;
    int n,d;
    int fa[maxn],vis[maxn];
    struct node
    {
        double x,y;
    }a[maxn];

    double dist(node a,node b)
    {
      double temp = (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
      return sqrt(temp);
    }
    int Find(int x)
    {
        return x==fa[x]?x:fa[x]=Find(fa[x]); 
    }
    void Union(int x,int y)
    {
        int fx=Find(x),fy=Find(y);
        if(fx!=fy&&dist(a[x],a[y])<=d)
         fa[fx]=fy;
    }
    void init()
    {
        for(int i=0; i<=maxn-5; i++)
         {
             fa[i]=i;
             vis[i]=0;
         }
    }
    int main()
    {
        scanf("%d%d",&n,&d);
        init();
        for(int i=1; i<=n; i++)
         scanf("%lf%lf",&a[i].x,&a[i].y);
        char ch;
        int x,y;
        while(cin>>ch)
        {
            if(ch=='O')
            {
                scanf("%d",&x);
                vis[x]=1;
                for(int i=1; i<=n; i++)
                {
                    if(vis[i])
                     Union(x,i);
                }
            }
            else
            {
                scanf("%d%d",&x,&y);
                if(Find(x)==Find(y))
                 printf("SUCCESS ");
                else
                 printf("FAIL "); 
            }
        }
       // system("pause");
        return 0;
    }

    /*

    4 1
    0 1
    0 2
    0 3
    0 4
    O 1
    O 2
    O 4
    S 1 4
    O 3
    S 1 4
    FAIL
    SUCCESS

    */
    
    
  • 相关阅读:
    Cocos2dx开发游戏移植到Android平台
    cocos2dx创建sprite的多种方法
    C++实现大数据乘法
    使用detours实现劫持
    使用C与C++混合编程封装UDP协议
    C++实现大数据乘法
    使用C与C++混合编程封装UDP协议
    python字符串类型
    python数字类型
    python数据类型
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/12752639.html
Copyright © 2020-2023  润新知