• POJ


    题目大意:

    某地发生了一次地震。ACM (Asia Cooperated Medical 亚洲联合医疗队) 已经为电脑搭建了一个无线网络。由于受到硬件的约束,每台电脑只能与距离它不超过 d 米的其它电脑直接通信。但每台电脑可被看作其它两台电脑的通信中转点,也就是说,如果电脑 A 和电脑 B 可以直接通信,或存在一台电脑 C 既可与 A 也可与 B 通信,那么电脑 A 和电脑 B 之间就能够通信。
    在处理网络修复的过程中,工作人员们在任何一个时刻,可以执行两种操作:维修一台电脑,或测试两台电脑是否能够通信。请您找出全部的测试操作。

    输入:
    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
    

     并查集模板,直接上代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    using namespace std;
    
    struct Point{
        int x,y;
    }point[1005];
    
    int u,v,n,d,cnt,p[1005],fix[1005];
    bool vis[1005];
    double GetD(int u,int v){
        int x = point[u].x - point[v].x;
        int y = point[u].y - point[v].y;
        return sqrt(1.0*x*x + 1.0*y*y);
    }
    
    int find(int x){
          return  x == p[x]? x:(p[x] = find(p[x]));
    }
    
    int main(){
        int k,cnt=0;
        scanf("%d%d",&n,&d);
        for(int i=0 ;i<= n;i++)  p[i] = i;
        for(int i=1 ;i<=n ;i++)
            scanf("%d%d",&point[i].x, &point[i].y);
        char ch[2];
        memset(vis,false,sizeof(vis));
        while (scanf("%s",ch)!=EOF)
        {
            if(ch[0] == 'O'){
                scanf("%d",&k);
                if(vis[k]) continue;
                vis[k] = true;
                fix[++cnt] = k;
                for(int i=1 ;i<cnt ;i++){
                    u = fix[i];
                    double t = GetD(u,k);
                    if(t <= d){
                        int fu = find(u);
                        int fv = find(k);
                        p[fu] = fv;
                    }
                }
            }
            else {
                scanf("%d%d",&u,&v);
                int fu = find(u);
                int fv = find(v);
                if(fu == fv) printf("SUCCESS
    ");
                else printf("FAIL
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    git生成sshkey
    Linux中假设系统丢失了ls命令
    Linux中rpm包管理器
    Linux软件包分类
    VI编辑器
    Java多线程——多线程方法详解
    Maven 无法下载依赖包的解决方法---三步dao!!!
    7. SOFAJRaft源码分析—如何实现一个轻量级的对象池?
    动手造轮子:实现简单的 EventQueue
    java中的string对象深入了解
  • 原文地址:https://www.cnblogs.com/wxx23-IOU/p/13574416.html
Copyright © 2020-2023  润新知