[POJ - 2236]無線ネットワーク(互いに素なセット)

無線ネットワーク

これは、その後、翻訳され

説明

東南アジアの地震。ACM(アジア協力医療チーム)は、ワイヤレスネットワークやラップトップが、予期せぬ余震ヒットを確立して、ネットワーク上のすべてのコンピュータが壊れています。1つのコンピュータの修理、ネットワークによって一つは、徐々に仕事を始めました。ハードウェアの制限により、各コンピュータは、それが遠く離れていないコンピュータと直接通信することができます。コンピュータAとコンピュータBは、直接通信することができる、またはコンピュータA CとAと通信することができる場合は、各コンピュータは、次に、コンピュータAとコンピュータ、すなわち、二つの他のコンピュータとの間の通信仲介者としてみなすことができますBが通信することができます。B. 

ネットワークを修復する過程では、スタッフは、2台のコンピュータが通信することができるコンピュータの修理かどうかテストする、任意の時点で両方の操作を行うことができます。あなたの仕事は、すべてのテスト動作に答えることです。 

入力

最初の行は二つの整数NおよびD(1 <= Nを<=含有 1001,0 <= D <= 20000)。Nは、1からNまで番号が付けられたコンピュータの数であり、ここで、Dは直接通信することができる2台のコンピュータの最大距離です。次のN行、二つの整数のXIを含む各行、NコンピュータはYI座標(0 <= XI、YIに <= 10000)、 それはあります。(N + 1)行から入力端に、操作が個別に実行しました。各列は、2つの形式のいずれかの動作が含まれています 
1。"OのP"(1 <= p <= N)、 コンピュータの修理は、pを表します。 
2. "S PQ"(1 < = P、Q <= N)、 それはテストコンピュータpおよびqが通信することができることを意味するかどうか。 

ない、三十万以下の行を入力します。 

出力

各テスト動作のために、2台のコンピュータがそうでなければ「FAIL」を印刷し、印刷「成功」と通信できるかどうか。

サンプル出力

4 1 
0 1 
0 2 
0 3 
0 4 
1 
O 2 
O 4 
S 1 4 
O 3 
S 1 4

サンプル出力

FAIL 
SUCCESS

トピックリンク

https://vjudge.net/problem/POJ-2236

 

彼が見て、それをすべての修理コンピュータを横断したときに、すべてのコンピュータを修正するかどうかの距離<= D、説明が合併二つのコンピュータのセットに沿って接続することができます。
すべて同じコレクションにどのような両方のコンピュータ場合を決定するための時間を確認してください。
コンピュータは、次に、座標番号N + 1が与えられます。このようなコンピュータは、0から始まる番号が付けられているので、彼が実際に修復が2番コンピュータであるO 3、など
 
これを見ることができない互いに素セット
 
ACコード
書式#include <iostreamの> 
の#include <cstdioを> 
する#include <fstreamの> 
の#include <アルゴリズム> 
書式#include <cmath> 
の#include <両端キュー> 
の#include <ベクトル> 
の#include <キュー> 
の#include < 文字列 > 
の#include <CStringの> 
#include <地図> 
の#include <スタック> 
の#include < 設定 > 
の#include <sstream提供>
 の#define IOS ios_base :: sync_with_stdio(0)。cin.tie(0)。
長い長いLL
 の#define 0x3f3f3f3f INF
 の#define MEM(X、Y)のmemset(X、Y、はsizeof(X))
 の#define MAXN 5 100000 +。
 使用 名前空間STD;
 INT N-、D;
 INT DX [MAXN]は; // 座標
INTは、Dyを[MAXN];
 int型 PAR [MAXN]; // PAR [I] Iをルートに
INTのペア[MAXN]; // 対[I] = P i番目コンピュータ修復数P 
INT findr(INT X)// クエリルート
{
     IF(PAR [X] == X)
         リターンX;
     戻り PAR [X] = findr(PAR [X])を、 
} 
ボイドユナイト(INTの X、int型 Y)を// マージ
{ 
    X = findr(X)、
    Y = findr(Y)、
     IF(X == Y)// 同じことなく、根管
        リターン; 
    PAR [X] = Y; // 全て、異なるXに内蔵されたyの場合、yはxの根であり、Y同様に本明細書に組み込まxは自由にすることができる
}
 ダブル DIS(INTINT B)// の要求
{
     戻り SQRT((ダブル)((DX [A] -dx [B])*(DX [A] -dx [B])+(Dyを[A] -dy [B])*(Dyを[A] - Dyの[B]))); 
} 
int型メイン() 
{
    MEM(ペア、0 ); 
    CIN >> N >> D。
    以下のためにint型 i = 0 ; iがn <; iは++ 
        CIN >> DX [I] >> DYの[I]。// 集合初始化
    ためint型 i = 0 ; iがn <; iは++ 
        パー[I] = I。
    int型の P、Q、LEN = 0 文字OP;
    一方、(CIN >> OP)
    { 
        場合(OP == ' O ' 
        { 
            CIN >> P。 
            P -  
            対[LEN ++] = P;
             のためのINT I = 0 ; IがLEN <; I ++は
            { 
                IF(DIS(対[I]、P)<=(ダブル)D)// 距離を決定 
                    ユナイトを(対[I]、P); // 複合組
            } 
        } 
        
        { 
            CIN >> P Q、
            P - 、Q - ;
             IF(findr(P)== findr(Q))// ルートチェック 
                COUTを<< " SUCCESS "<< てendl;
            他の
                裁判所未満 << " FAIL " << てendl; 
        } 
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/sky-stars/p/11332511.html