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

链接:

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

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#problem/A

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std;

#define N 1005

int n, f[N], a[N][2], repair[N];

int Find(int x)
{
    if(f[x]!=x)
        f[x] = Find(f[x]);
    return f[x];
}

double Dis(int x, int y)
{
    return sqrt(double((a[x][0]-a[y][0])*(a[x][0]-a[y][0])+(a[x][1]-a[y][1])*(a[x][1]-a[y][1])));
}

int main()
{
    double d;
    int i, x, y, len=0;
    char ch;

    memset(repair, 0, sizeof(repair));
    memset(a, 0, sizeof(a));

    scanf("%d%lf", &n, &d);

    for(i=0; i<n; i++)
    {
        f[i]=i;
        scanf("%d%d", &a[i][0], &a[i][1]);
    }
    f[n]=n;

    while(cin>>ch)
    {
        if(ch==‘O‘)
        {
            scanf("%d", &x);
            x--;
            repair[len++]=x;
            for(i=0; i<len-1; i++)
            {
                if(repair[i]!=x && Dis(repair[i], x)<=d)
                    f[Find(repair[i])]=Find(x);
            }
        }
        if(ch==‘S‘)
        {
            scanf("%d%d", &x, &y);
            x--, y--;

            if(Find(x)==Find(y))
                printf("SUCCESS\n");
            else
                printf("FAIL\n");
        }
    }

    return 0;
}
时间: 2024-10-12 03:35:36

(并查集) Wireless Network --POJ --2236的相关文章

Wireless Network (poj 2236 并查集)

Language: Default Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 17602   Accepted: 7418 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network wit

A - Wireless Network POJ - 2236

题目大意:有n台坏掉的电脑,给出每台电脑的坐标,然后每次询问输入0(字符) x,表示电脑x恢复正常,输入S x y 询问x和y是否可以联网.只要是x和y的距离小于距离d,那么就可以联网,如果有个中介c使得x到c的距离小于d,y到c的距离小于d,那么x和y也可以联网. 题解:当修复好一台电脑后,然后判断与之前修好的电脑的距离,小于d的话,用并查集连在一起.(没敢这样想,感觉这样会T....) #include<cstdio> #include<iostream> #include&l

POJ 2236 (简单并查集) Wireless Network

题意: 有n个电脑坏掉了,分别给出他们的坐标 有两种操作,可以O x表示修好第x台电脑,可以 S x y表示x y是否连通 两台电脑的距离不超过d便可连通,两台电脑是连通的可以直接连通也可以间接通过第三台电脑连通 思路: 每次修好一台电脑都和前面已经修好的电脑比较一下如果距离小于d而且不在同一网络,便合并在一起即可 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring&g

Wireless Network POJ 2236

http://poj.org/problem?id=2236 题意:现有一些电脑(编号从 1 - N),在修理好某台电脑并且当这台电脑与其他电脑距离不超过 D 的情况下, 其他电脑可以由这台电脑控制.       有两种操作:一是修理编号为 x 的某台电脑, 而是询问你编号从 p - q 的电脑是否都彼此联通 #include <iostream> #include <cstdio> #include <cmath> #include <algorithm>

A - Wireless Network POJ - 2236-kuangbin带你飞

A - Wireless Network POJ - 2236 Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 50348   Accepted: 20619 Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with

POJ 2236 Wireless Network ||POJ 1703 Find them, Catch them 并查集

POJ 2236 Wireless Network http://poj.org/problem?id=2236 题目大意: 给你N台损坏的电脑坐标,这些电脑只能与不超过距离d的电脑通信,但如果x和y均能C通信,则x和y可以通信.现在给出若干个操作, O p 代表修复编号为p的电脑 S p q代表询问p和q是不是能通信. 思路: 并查集即可.. 如果修复了一台电脑,则把与它相连距离不超过d的且修复了的放在一个集合里面. #include<cstdio> #include<cstring&

poj2236_并查集_Wireless Network

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

并查集水题 POJ 1611

题意:有n(n<=30000)个学生,每个学生属于一个团体(可以属于多个团体),共有m(<=500)个团体,如果一个学生是嫌疑人,则他所在的团体的所有人都是嫌疑人,初始时0号学生是嫌疑人.问总共有多少个嫌疑人. 很明显同一个团体的学生可以连一条边,即求0号点所在的连通块有多少个点,用并查集可以很方便的办到,如果两个点属于同一个连通块则把他们的代表元连接起来即可,始终把较小的那个节点作为父节点,所以最后p[0]的节点数就是答案. 代码:

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