無線ネットワーク
これは、その後、翻訳され
説明
東南アジアの地震。ACM(アジア協力医療チーム)は、ワイヤレスネットワークやラップトップが、予期せぬ余震ヒットを確立して、ネットワーク上のすべてのコンピュータが壊れています。1つのコンピュータの修理、ネットワークによって一つは、徐々に仕事を始めました。ハードウェアの制限により、各コンピュータは、それが遠く離れていないコンピュータと直接通信することができます。コンピュータAとコンピュータBは、直接通信することができる、またはコンピュータA CとAと通信することができる場合は、各コンピュータは、次に、コンピュータAとコンピュータ、すなわち、二つの他のコンピュータとの間の通信仲介者としてみなすことができますBが通信することができます。B.
ネットワークを修復する過程では、スタッフは、2台のコンピュータが通信することができるコンピュータの修理かどうかテストする、任意の時点で両方の操作を行うことができます。あなたの仕事は、すべてのテスト動作に答えることです。
ネットワークを修復する過程では、スタッフは、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が通信することができることを意味するかどうか。
ない、三十万以下の行を入力します。
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(INT、INT 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 。 }