POJ-2485高速道路+ POJ-1258アグリネット【】クラスカル

ボードの質問を終えたときに、すべてのクラスカル純粋ボードのタイトルので、まとめ書きが判明しました。

1の#include <cstdioを>
 2の#include <CStringの>
 3の#include <iostreamの>
 4の#include <アルゴリズム>
 5の#include <cmath>
 6の#include < ストリング >
 7の#include <積層>
 8の#include <キュー>
 9# <ベクトル>含む
 10の#include <cstdlib>
 11 //#は、<WINDOWS.H>含む
 12  の#define第Fiの
 13  の#defineが第二SE
 14を 使用して、 名前空間STDを、
15 typedefの長い 長いLL。
  INT N = 1E6 + 10 17  のconst  int型 INF = 0x3f3f3f3f 18  のconst  int型 INF = - INF。
19  のconst  int型 MOD = 1E9 + 7 20  CONST  ダブル PI = ACOS( - 1.0 )。
21  int型N、M。
22  int型の父[ 505 ]。
23  ボイドのinit(){
 24      、M = 0 25      のmemset(父、 - 1はsizeof (父))。
26  }
 27  構造体ノード{
 28      int型のU、V、W。
29      ノード(){}
 30      ノード(INT U、INT V、INT W):U(U)、V(V)、W(W){}
 31      ブール 演算子 <(constのノード&RHS)のconst {
 32          リターン <W rhs.w;
33      }
 34  }エッジ[N]。 
35  int型の検索(INT X){
 36      リターン父[X] == - 1 X:父[X] = (父親は[X])を探します。
37 }
 38  INT クラスカル(){
 39      INT MAXN = - 1 40      int型 CNT = 0 41      のためにint型 iは= 0 ;私がm <I ++は{)
 42          INT U = エッジ[I] .U。
43          のint V = エッジ[I] .V。
44          であれば(!=(U)を探す{(V)の検索)
 45              父[(U)を検索] = (V)を探します。
46              MAXN = MAX(MAXN、エッジ[I] .W)。
47              であれば(++ CNT> = N- 1戻りMAXN。  
48          }
 49      }
 50      リターン - 1 51  }
 52  INT メイン(){
 53      のint T。
54      のscanf(" %dの"、&T)。
55      一方(T-- ){
 56          のscanf(" %d個"、&N)
57          のinit();
58          int型のT;
59          のためにint型 i = 1 ; iが<= N; iが++ ){
 60              のためにINTの J = 1 ; J <= nであり、j ++ ){
 61                  のscanf(" %dの"、&T)。
62                  エッジ[M ++] = ノード(I、J、T)。
63              }
 64          }
 65          ソート(エッジ、エッジ+ M)。
66          のprintf(" %d個の\ n " 、クラスカル())。
67      }
 68      //システム(" 一時停止" )。
69      リターン 0 ;
70 }

 1258 2485は、直接入力の複数のセットに注意を払うように変更するために変更することができます。

書式#include <cstdioを> 
する#include <CStringの> 
の#include <iostreamの> 
の#include <アルゴリズム> 
書式#include <cmath> 
の#include < 文字列 > 
の#include <スタック> 
の#include <キュー> 
の#include <ベクトル> 
の#include <cstdlib> 
#include <WINDOWS.H>
 の#define最初のfi
 の#defineは、第二SE
 使用して 名前空間STDを、
typedefの長い 長いLL。
CONSTの INT N = 1E6 + 10  0x3f3f3f3f ;
const  int型 INF = - INF。
const  int型 MOD = 1E9 + 7 constの ダブル PI = ACOS( - 1.0 )。
LL N、M。
LL父[ 505 ]。
ボイドのinit(){ 
    M = 0 
    memsetの(父、 - 1はsizeof (父)); 
} 
構造体ノード{ 
    LL U、V、W。
    ノード(){} 
    ノード(LL U、LLをV、W LL):U(U)、V(V)、W(W){} 
    ブール 演算子 <(constのノード&RHS)CONST {
         リターン <W rhs.w。
    } 
}エッジ[N]。
LL(検索INT X){
     戻り父を[X] == - 1 X:父[X] = (父親は[X])を探します。
} 
クラスカル(){LL 
    LL和 = 0 
    LL CNT = 0 (LL i = 0 ; iがm <; iは++ ){ 
        LL U = エッジ[I] .U。
        LLのV = エッジ[I] .V。
        場合(!検索(u)は= 検索(V)){ 
            父は、[検索(U)] = 検索(V); 
            合計+ = エッジ[I] .W。
            もし(++ CNT> = N- 1のリターン合計。  
        } 
    } 
    リターン - 1 
} 
int型のmain(){
     // INT T。
    // のscanf( "%dの"、&T)。
    一方、(〜のscanf(" %のLLD "、&​​N)){ // 注意多组输入
        のinit(); 
        LLのトン。
        (LL i = 1 ; iが++; iが<= N ){
             ため(LLのJ = 1 ; J <= nであり、j ++ ){ 
                scanf関数(" "%のLLD、&T)。
                エッジ[M ++] = ノード(I、J、T)。
            } 
        } 
        ソート(エッジ、エッジ + M)。
        printf(" %d個の\ n " 、クラスカル())。
    } 
    システム(一時停止)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/yoshinaripb/p/11786041.html