源哥每日一题第十九弹 poj 2236 还是冰茶集

Posted fengyuzhicheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了源哥每日一题第十九弹 poj 2236 还是冰茶集相关的知识,希望对你有一定的参考价值。

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

题意:有一堆坏电脑,和两种操作:O表示修好这台电脑,S 询问两台电脑是否联通。主要是判电脑是否联通:两台电脑间距离小于d就是联通的。

题解:emmm……直接写啊

#include <iostream>
#include <cstdio>

using namespace std;
int n;
long long d;
int pre[1005];
int jud[1005];
struct coor
{
    long long x,y;
}p[1005];

int find(int x) {
    int r = x;
    while(pre[r]!=r) r = pre[r];
    int i = x,j;
    while(i!=r) {
        j = pre[i];
        pre[i] = r;
        i = j;
    }
    return r;
}

int main(int argc, char const *argv[]) {
    
    int n,d;
    cin >> n >> d;
    for (int i = 1; i <= n; i++) {     
        cin >> p[i].x >> p[i].y;
        pre[i] = i;
        jud[i] = 0;
    }
    char s;
    int x,y;
    while(cin >> s) {

        if(s ==S) {
            cin >> x >> y;
            if(find(x) == find(y)) {
                puts("SUCCESS");
            } else { 
                puts("FAIL");
            }
        } else {
            cin >> x;
            for (int i = 1; i <= n; i++) {
                if(jud[i] && (p[x].x-p[i].x)*(p[x].x-p[i].x)+(p[x].y-p[i].y)*(p[x].y-p[i].y) <=d*d){
                    pre[find(x)] = find(i);
                }
            }
            jud[x] = 1;
        }
    }
    return 0;
}

 

以上是关于源哥每日一题第十九弹 poj 2236 还是冰茶集的主要内容,如果未能解决你的问题,请参考以下文章

源哥每日一题第十八弹 poj 1182 并查集

源哥每日一题第十五弹 poj 1190 关于深搜减枝以及对于阅读代码的思考

源哥每日一题第十四弹 hdu 1565 还是状压dp

源哥每日一题第十三弹 百练4124:海贼王之伟大航路 状压dp

C#三十六道简单填空题

全国计算机等级考试二级Python(2021年9月)备考笔记 第十二天