ワイヤレスNetwork--シンプル互いに素セット

トピックリンク

質問の意味:

、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 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/j666/p/11609973.html