地震が東南アジアで行われます。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行を超えることはありません。
コンピュータPの修復を意味し、1「OのP」(1 <= p <= N)。
2.コンピュータpおよびqが通信できるかどうかのテストを意味し、 "S PがQ"(1 <= P、Q <= N)。
入力は300000行を超えることはありません。
出力
各試験操作、印刷、「SUCCESS」2台のコンピュータが通信する、またはことができるかどうかについて、「FAIL」の場合ではありません。
サンプル入力
4 1 0 1 0 2 0 3 0 4 O 1 O 2 O 4 S 1 4 O 3 S 1 4
サンプル出力
FAIL SUCCESSの
問題の意味:N破損コンピュータがあり、コンピュータAとBは、2つに接続することができ、D Mに一緒に接続することができ、B及びCは接続することができ、その後、B cは接続することができます。
次に、2つの操作、大文字Oと大文字Sがあり、Oは、試験AとBとの間の接続かどうかを示すS、修復破損コンピュータを表します。最初の行nの入力、D。
およびnは、コンピュータのn番目の行の位置を表し、そして、文ダウン、各ステートメントの実行、テストのために文が出力されるテスト結果はSUCCESSまたはFAILです。
アイデア:単純互いに素なセットは、最初のコンピュータの座標との間の関係とは、最終的な決意に、ドット間の関係を確認する濃度に変換されます。
コード:
1の#include <cstdioを> 2の#include <fstreamの> 3の#include <アルゴリズム> 4の#include <cmath> 5の#include <両端キュー> 6の#include <ベクトル> 7の#include <キュー> 8の#include < ストリング > 9#含む<CStringの> 10の#include <地図> 11の#include <スタック> 12の#include < セット > 13の#include <sstream提供さ> 14の#include <入出力ストリーム> 15件 の#define MOD 998244353の 16 の#defineのEPS 1E-6 17 の#define LLロングロング 18である の#define INFの0x3f3f3f3f 19。 使用した 名前空間STD; 20である 21ことである // コンピュータの座標記録 22である 構造体ノード 23は 、{ 24 のint X、Y; 25 }; 26であるノードNO [ 1005 ]; 27 //はエネルギーを節約x番目のコンピュータに接続されたコンピュータ 28のベクトル< INT > [VE 1005に]; 29 // コンピュータが修復されているかどうかを節約 30 BOOL VIS [ 1005 ]; 31である 32 // FA [x]はxの遠い祖先表し 33が INT FA [ 50002 ]; 34である // 初期化中に個別に設定し、それぞれの開始点 35 空隙を作る(INT qwq) 36 { 37 [ ため(INT I = 1 ; I <= qwq; Iは++ ) 38である { 39 FA [I] = I; 40 } 41が 戻り、 42である } 43れる // Xの遠い祖先、圧縮経路を見つける 44れる INT検索(INT X) 45 { 46は、 IF(FA [X] == X) 47 { 48 リターン; X 49 } 50 リターン FA [X] = (FA [X])を見つけ、 51である } 52が // 決定し、X、Yは、直接、同じセット内にありません分析遠い祖先が同じではありません 53れる BOOLチェ(int型のx、int型のY) 54である { 55 リターン(X)==検索(y)を見つけ、 56である } 57である // 組み合わせX、Y、我々は、xとyである決定しました同じことが、設定されていない 58 @ パス圧縮FA [X]、FA [yが後 】 既に遠い祖先である、 59 // ので、直接FAは、[X] FA [Y]は先祖父親に接続された 60 空隙マー(INTの X、int型Y)が 61であり 、{ 62は IF(!チェ(X、Y)) 63である { 64 FA [FA [X] = ; FA [Y] 65 } 66 リターン; 67 } 68 INT Distan(ノードA 、ノードB) 69 { 70 リターン(BX-AX)*(AX-BX)+(AY-によって)*(Ay- によって); 71である } 72 // 設定修復コンピュータxおよびxに×セットが接続されています合成 73は、 空隙アップデータ(INT X) 74 { 75 VIS [X] = trueに、 76 のために(INT I = 0 ;私はVE <[X] .size();私は++ ) 77 { 78 // X連鎖性の点 79 INT Y = VE [X] [I]。 80 // 合流点yがxとy起こされている場合 81を IF(VIS [Y] &&!チェ(X、Y)) 82 { 83 Merの(X、Y); 84 } 85 } 86 } 87 のint main()の 88 { 89 int型N-、D; 90 scanfの(" %のDの%のD "、およびN-、&D) 91である // 初期化情報 92 、ビルド(N-) 93 // 記録点情報 94 のために(INT I = 1 I <= N; I ++は) 95 { 96 scanfの(" %のDの%のD "、&NO [I] .X、&NO [I] .Y); 97 } 98 // で一緒に接続することができる点との間で決定されたトラバース 99 のために(INT I = 1 ; I <= N-; Iは++ ) 100 { 101 のための(INTJ = I + 1、J <= N; J ++ ) 102 { 103 場合(distan(NO [I]、NO [J])<= D * D) 104 { 105 [i]は.push_back(J)ましありません。 106は、 VEの[J] .push_back(I)。 107 } 108 } 109 } 110 チャーCH。 111 INTのA、B。 112 一方(scanf関数(" %のC "、&CH)!= EOF) 113 { 114 もし(CH == ' O ' ) 115 { 1 16 scanfの(" %のD "、&A ); 117 アップデータ(A); 1 18 } 119 他 IF(CH == ' S ' ) 120 { 121 scanfの(" %Dの%のD "、&A、&B); 122 // 二つが一緒に接合することができる表すとき、同じ祖先の二点 123 のiF(探す(A)== 検索(B)) 124 { 125 のprintf(" N- \ SUCCESS " )。 126 } 127 そう 128 { 129 のprintf(" FAILの\ n " ); 130 } 131 } 132 } 133 }