Wireless Network——简单并查集

题目链接

题意:

有n台电脑,x,y代表电脑坐标 ,两台修好的电脑如果距离<=d就可以联网, O p 代表 修理p电脑  S p q代表链接p q

题解:

并查集维护即可,在O操作下,在已经修好的电脑里面找到与当前电脑距离<=d 的,join()一下

代码:

#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
typedef long long ll;
const int maxn=5e5+5;
int f[maxn];
int n,d;
int dx[maxn],dy[maxn];
int tmp[maxn];
int Find(int x)
{
    return x==f[x]?x:f[x]=Find(f[x]);
}
void join(int x,int y)
{
    int fx=Find(x);
    int fy=Find(y);
    if(fx!=fy)
    {
        f[fx]=fy;
    }
}
double dis(int a,int b)
{
    return sqrt((double)((dx[a]-dx[b])*(dx[a]-dx[b])+(dy[a]-dy[b])*(dy[a]-dy[b])));
}
int main()
{
    scanf("%d%d",&n,&d);
    for(int i=1;i<=n;i++)scanf("%d%d",&dx[i],&dy[i]);

    for(int i=1;i<=n;i++)f[i]=i;
    char op;
    int p,q;
    int cnt=0;
    while(cin>>op)
    {
        if(op==‘O‘)
        {
            scanf("%d",&p);
            tmp[cnt++]=p;
            for(int i=0;i<cnt;i++)
            {
                if(dis(tmp[i],p)<=(double)d)join(tmp[i],p);
            }

        }
        else
        {
            scanf("%d%d",&p,&q);
            if(Find(p)==Find(q))printf("SUCCESS\n");
            else printf("FAIL\n");
        }
    }

    return 0;
}

原文地址:https://www.cnblogs.com/j666/p/11609973.html

时间: 2024-10-12 15:21:21

Wireless Network——简单并查集的相关文章

POJ2236 wireless network 【并查集水题】

前端开发whqet,csdn,王海庆,whqet,前端开发专家 今天是个好日子,2014年5月20日,表白的最佳时机,虽说孩子已经四岁.结婚已经五年,但是也不可以偷懒,于是有了这个效果. 在线研究点这里,下载收藏点这里.程序猿and程序媛,大胆秀出你的爱吧. 利用html5 canvas实现动态的文字粒子效果,效果如下. OK,简单看看原理,首先我们需要在canvas里面实现描边文字,然后利用getImageData获得描边文字的像素矩阵,将粒子效果绑定在描边文章上. 整个效果如下. html文

poj 2236:Wireless Network(并查集,提高题)

Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 16065   Accepted: 6778 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computer

POJ2236 Wireless Network 【并查集】

Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 16885   Accepted: 7091 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computer

【POJ - 2236】Wireless Network (并查集)

Wireless Network 这接翻译了 Descriptions 地震发生在东南亚.ACM(亚洲合作医疗团队)已经与膝上电脑建立了无线网络,但是一次意外的余震袭击,网络中的所有计算机都被打破了.计算机一个接一个地修复,网络逐渐开始工作.由于硬件限制,每台计算机只能直接与距离它不远的计算机进行通信.但是,每台计算机都可以被视为两台其他计算机之间通信的中介,也就是说,如果计算机A和计算机B可以直接通信,或者计算机C可以与A和A进行通信,则计算机A和计算机B可以进行通信. B. 在修复网络的过程

[北大机试F]:Wireless Network(并查集)

总时间限制:  10000ms 内存限制:  65536kB 描述 An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computers, but an unexpected aftershock attacked, all computers in the network were all

poj 2236 Wireless Network(并查集)

题目大意: 给你N台电脑,从1-N.一个数字,表示两台计算机的最大通信距离,超过这个距离就无法进行通信.然后分别告诉这些电脑的坐标,接下来有两种操作,第一种O表示这点电脑修好,第二种S,表示测试这两台电脑能不能进行正常的通信   解题思路: 并查集的简单应用,对每次修好的电脑对其它已经修好的电脑遍历,如果距离小于等于最大通信距离就将他们合并.之后判断2台电脑是不是一个集合中就KO了 1 #pragma comment(linker, "/STACK:1024000000,1024000000&q

poj 2236 Wireless Network 【并查集】

Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 16832   Accepted: 7068 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computer

Wireless Network(POJ-2236)(并查集)

由于查询次数可能很多,相互关联的电脑也可能很多,而各个电脑之间的关系只有合并关系和查询,符合并查集的特点. 并查集更偏模板一点,没有什么思维难度,只要把握好需要使用并查集的条件就好了. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<map> using namespace std; i

POJ2236:Wireless Network(并查集)

Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 39772   Accepted: 16479 题目链接:http://poj.org/problem?id=2236 Description: An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a