問題の説明
地震が東南アジアで行われます。ACM(アジア間連携医療チーム)がラップコンピュータとワイヤレスネットワークを設定しましたが、予想外の余震が攻撃、ネットワーク内のすべてのコンピュータはすべて壊れていました。コンピュータは、一つ一つを修復され、そしてネットワークが徐々に再び仕事を始めました。、ハードウェア制限により、各コンピュータは、直接からDメートルよりも遠くないコンピュータと通信することができます。すべてのコンピュータは、2台の他のコンピュータとの間の通信の仲介者としてみなすことができるが、それは、コンピュータAとコンピュータBが直接通信できる場合、コンピュータAとコンピュータBが通信することができると言うことであるか、またはその両方Aと通信することができるコンピュータ・CがあるとB.
ネットワークを修復する過程では、労働者は2台のコンピュータが通信できる場合、コンピュータ、またはテストを修復、すべての瞬間において業務の2種類を取ることができます。あなたの仕事は、すべてのテスト作業に答えることです。
ネットワークを修復する過程では、労働者は2台のコンピュータが通信できる場合、コンピュータ、またはテストを修復、すべての瞬間において業務の2種類を取ることができます。あなたの仕事は、すべてのテスト作業に答えることです。
入力
最初の行は、N及びD(1 <= N <= 1001 0 <= D <= 20000)は、2つの整数を含みます。ここでNは、1からNまで番号付けされているコンピュータの数であり、Dは、2台のコンピュータが直接通信可能な最大距離です。次のNラインにおいて、それぞれがN個のコンピュータの座標を2つの整数のXI、YI(0 <= XI、YIを<= 10000)、含まれています。(N + 1)番目の行からの入力の終わりに、一枚ずつ行われる動作があります。各行は、次の2つの形式のいずれかでの操作が含まれています。
コンピュータpを修復手段1 "OのP"(1 <= p <= N)。
2.コンピュータpおよびqが通信できるかどうかのテストを意味し、 "S PがQ"(1 <= P、Q <= N)。
入力は300000行を超えることはありません。
出力
各試験操作、印刷、「SUCCESS」2台のコンピュータが通信する、またはことができるかどうかについて、「FAIL」の場合ではありません。
サンプル入力
1 4 0 1 0 2 0 3 0 4 O 1 O 2 O 4 S 1 4 O 3 S 1 4
サンプル出力
FAIL
SUCCESS
質問の意味:
すべてのラインが壊れているコンピュータネットワークがあり、今、あなたは両方の操作を行うことができ、修理(O)と検出をコンピュータネットワークがn個
2台のコンピュータのみで通信するコンピュータを修理し、(S)が通信しています。与えられ超えることができない二つのコンピュータからルール通信があります
最大距離D(最初のnは、コンピュータを調整します)。2台のコンピュータが通信できるときに出力するかどうかを検出
アイデア:
単純なアプリケーションをチェックし、設定します。私は、構造、各コンピュータの記録状態を使用。
コンピュータの状態に指定されたタイトルが更新されるによると、それはオードのコレクション全体にマージされるかどうかを確認するために、コンピュータにアクセスするためにトラバース!
注意:時間は、現在のコンピュータへのルートからの距離を計算すると考えることはできません!!!
#include <iostreamの> する#include <cmath> の#include <CStringの> する#include <cstdioを> 使用して 名前空間STD。 INT [ 1005 ]、[B 1005 ]。 構造体ノード { ダブルX、Y。 } P [ 1005 ]。 INT GETF(INT X) { 場合(X == B [X]) 戻りX。 戻り B [X] = GETF(B [X])。 } ボイドマージ(int型のx、int型のY) { int型交流; = GETF(X)。 C = GETF(Y)。 もし(!= C) B [C] = 。 } int型のmain() { int型、X、Y、N。 ダブルD; チャー C [ 2 ]。 CIN >> N >> D。 memset(0、はsizeof (a)参照)。 以下のために(int型 iは= 0 ; iが< 1005 ; iは++ ) B [i]は = I。 以下のための(int型私は=1 ; I <= N。I ++ ) CIN >> P [i]は.X >> のP [I] .Y。 N = 0 。 一方、(CIN >> C) { もし、(C [ 0 ] == ' O ' ) { CIN >> X。 用(int型 iは= 0 ; iがN <I ++は) { ダブル。TX = P [I] X、TY = P [I] Y、EX = P [X] .X、EY = P [X] .Y。 ダブル L = SQRT((TX-EX)*(TX-EX)+(TY-EY)*(TY-EY)+ 0.0 )。 もし(L <= D) ([I]、X)をマージします。 } [N ++] =のX。 } もし、(C [ 0 ] == ' S ' ) { CIN >> X >> Y。 もし(GETF(X)== GETF(Y)) プット(" SUCCESS " )。 他の プット(" FAIL " ); } } 戻り 0 。 }