POJ - 2349北極ネットワーク(クラスカル)

あなたは、n個のセンチネル座標点を与え、その後、通信接続がどのように最小コストを求めたように、Mは、最小のコストの最長辺与えられ、衛星に対応するがある
費やすことなく、直接接続することができる衛星を持っています2つのポスト
のアイデアを:として、最小コストの最長辺を必要とし、我々は、M-1の最大エッジストリップを除去する、すなわち出力側NM物品はまた、所望される
NMエッジコネクタを見つけるために、我々は、クラスカルを解決するためにアルゴリズムを使用します

 

完全なコード:(精度の出力に、またはG ++注目%のF、C ++%LFを使用)を使用します

#include <iostreamの> 
する#include <cstdioを> 
する#include <CStringの> 
する#include <アルゴリズム> 
の#include <cmath>
 使用して 名前空間STD。
const  int型 MAXN = 1E4; // 点数
のconst  int型の MAXM = 1E6 + 10// 边数
のint [MAXN]事前;
構造体のエッジ{
     int型Uを、V。
    ダブルワット; 
}エッジ[MAXM]。
int型のトップ。 
int型のCNT;
ダブルANS;
INTのN、M。

構造体のスポット{
     ダブルX、Y。
} [MAXN]見つけます。
ボイド addedge(INT U、INT V、ダブルW){ 
    エッジ[トップ] .U = U。
    エッジ[トップ] .V = V。
    エッジ[トップ。++]、W = W。
} 
BOOL CMP(エッジA、エッジB){
     戻り AW < BW。
} 
INT(見つけるINT X)
{ 
    場合(!X =事前[X])リターン [X] =事前(予め[X])を見つけます。
    他に 戻る前の[X]を。
} 
BOOL団結(int型のx、int型Y){
     int型の FX = 検索(X);
     int型 FY = 検索(Y);
     IF!(FX = FY){ 
        [FX]前 = FY; 
        CNTを ++ ;    
         返す trueに; 
    } 
    それ以外の リターン falseにする; 
} 
ダブルクラスカルを( ){ 
    ソート(エッジ、エッジ +トップ、CMP); // 使い捨てのすべてのエッジが並んでいる
    INT U、V、
     ダブルW;
     のためのint型 I = 0 ; Iはトップ<; Iは++ ){ 
        Uを =エッジ[I] .U。   
        V = エッジ[I] .V。   
        W = エッジ[I] .W。
        団結(U、V);   
        もし(CNT == N- M){ 
            ANS = W。
            破ります; 
        } 
    } 
    もし(CNT <nm)のリターン - 1 戻るANSを。
} 
ボイドのinit(int型N){ 
    memsetの(エッジ、0はsizeof (エッジ))。
    以下のためにint型 i = 0 ; iが<= N; iは++ 
        事前[I]= I; 
    ANS =人気= CNT = 0 
} 
二重 getDist(int型 I、int型のJ){
     二重 SX =(スポット[I] .Xスポット[J] .X)*(スポット[I] .x- スポット[J] .X)。
    ダブル SY =(スポット[I] .Yスポット[J] .Y)*(スポット[i]の.y- スポット[J] .Y)。
    ダブル DIS =のSQRT(SX + SY)。
    返すDISを。
} 
int型のmain(){
     int型のT。
    CIN >> T;
      int型、B、W;
    一方、(T-- ){ 
        CIN >> M >>  N。
        INIT(N)
        トップ = CNT = 0 以下のためにint型 i = 0 ; iがn <I ++は{)
            CIN >>スポット[I] .X >> スポットを[I] .Y。
        } 
        のためにint型 I = 0 ; iがN <; Iは++ ){
             ためint型 J = I + 1、J <nであり、j ++ ){
                 二重コスト= getDist(i、j)は、
                addedge(I、J、コスト)。
                addedge(J、I、コスト)。
            } 
        } 
       のprintf(" %.2fする\ n"、クラスカル())。
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/Tianwell/p/11304994.html