トピックリンク
質問の意味:
、2台のコンピュータが修復n個のコンピュータ、X、代表的なコンピュータのy座標は、ある距離<=ネットワークに接続することができるD、コンピュータPはO pを修復代表代表リンクS PQ PQ場合
ソリューション:
互いに素なセットを維持するために、O動作時には、時)(現在は<= Dであるが、参加そこからPCコンピュータに修復されています
コード:
書式#include <iostreamの> 書式#include <stdio.hに> する#include <math.h>の 使用して 名前空間はstd; typedefの長い 長いLL。 const int型 MAXN = 5E5 + 5 。 INT [MAXN] F。 int型nは、D; int型のDX [MAXN]、DY [MAXN]。 int型TMP [MAXN]。 INT検索(int型X) { 戻り X == F [x]はx:F [X] = 検索(F [X])。 } ボイドは、(参加int型のx、int型のY) { int型 FXを= 探す(X)。 int型FY = 検索(Y)。 もし(!FX = FY) { F [FX] = FY。 } } ダブル DIS(INT A、INT B) { リターン SQRT((ダブル)((DX [A] -dx [B])*(DX [A] -dx [B])+([A] -dyをDY [B])*(DY [A] - DY [B])))。 } int型のmain() { scanf関数(" %D%dの"、&N、&D)。 以下のために(int型私= 1 iが++; iが<= N)のscanf(" %D%dの"、&DX [i]は、&DY [I])。 以下のための(int型 i = 1 ; iが<= N;)は、i ++はF [I] = I。 文字OP; int型のP、Q; int型 CNT = 0 ; 一方、(CIN >> OP) { 場合(OP == ' O ' ) { scanf関数(" %のD "、&P)。 TMP [CNT ++] = P。 以下のために(int型 i = 0 ; iは、CNT <; iは++ ) { 場合(DIS(TMP [I]、P)<=(二重)d)に参加(TMP [I]、P)。 } } 他 { scanf関数(" %dの%のD "、&P&Q)。 もし(検索(P)==検索(Q))のprintf(" SUCCESSの\ nを" ); 他のprintf(" FAIL \ nを" ); } } 戻り 0 。 }