poj Wireless Network

这里写图片描述
AC情况:
这里写图片描述
大致思路:这题看到就往并查集上靠了,就是判断距离那块感觉有点费时间,不过AC了,之前WA一次,查了半天发现是FAIL输成了FALL,,难受。。。

#include<iostream>
using namespace std;
int x[1001];
int y[1001];
int r[1001] = {0};

int par[1001];
int ran[1001];

void init(int n) {
    for (int i = 0; i < n; i++) {
        par[i] = i;
        ran[i] = 0;
    }
}
int find(int x) {
    int j, r;
    r = x;
    while (par[r] != r)r = par[r];
    while (par[x] != r) {
        j = par[x];
        par[x] = r;
        x = j;
    }
    return r;
}
void unite(int x, int y) {
    x=find(x);
    y = find(y);
    if (x != y) {
        ran[x] < ran[y] ? par[x] = y : par[y] = x;
        if (ran[x] == ran[y])ran[y]++;
    }
}

int main() {
    int N, D,i,op1,op2;
    char c;
    cin >> N >> D;
    init(N);
    for (i = 0; i < N; i++)
        cin >> x[i] >> y[i];
    while (cin >> c) {
        if (c == 'O') {
            cin >> op1;
            op1--;
            r[op1] = 1;
            for (i = 0; i < N; i++) 
                if (r[i]&&find(op1)!=find(i)) 
                    if (D*D >= (x[i] - x[op1])*(x[i] - x[op1]) + (y[i] - y[op1])*(y[i] - y[op1])) {
                        unite(op1, i);
                    }
        }if (c == 'S') {
            cin >> op1 >> op2;
            op1--; 
            op2--;
            if (find(op1) == find(op2)) cout << "SUCCESS"<<endl;
            else cout << "FAIL"<<endl;
        }
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值