ヘイの説明のLuoGu P1547アウト

(* ^ - ^ *)こんにゃくの問題解決を指して希望のギャングスター(* ^ __ ^ *)

元のタイトルを見ます

私は個人的にこの質問はクラスカルのアルゴリズムは、テンプレートのタイトルだと思い非常に簡単です

クラスカル(クラスカル):最小スパニングツリーアルゴリズムに独創的な互いに素なセットを使用。

実装プロセス:

次のようにプロセスは以下のとおりです。

  1. 初期化は、互いに素なセット、自身の親ノードの各点を初期化します。
  2. ゼロにカウンター。
  3. 大速い行に小さな値の全て右端。
  4. 具体的なクラスカル法:
1  ためには、int型、I = 1 ; I <= M; iが++ 2  {
 3      int型 = =(E [I] .X)、F2検索F1 (E [I] .Y)を探します。
4      もし(!F1 = F2)
 5      {
 6つの          ANS = MAX(ANS、E [I] .DIS)。
7つの          FA [F1 = F2。
8          もし(K == N- 1ブレーク9          K ++ 10      }
 11 }

 

以下の完全なコード(Diudiu aをコメント)

コード

#include <ビット/ STDC ++ H.>
 使用して 名前空間STD;
 int型 N-、M、ANS、K = 1、FA [ 100005 ];
 構造体ノード// エッジ構造によって表される
{
     int型のX、Y、DIS; 
} E [ 100005 ];
 BOOL CMP(ノードX、ノードY)
{ 
    戻り <x.dis y.dis; 
} 
int型検索(INT X)// Xの祖先を見つける
{
     IF FA [X] =(FA [x]はxを=!)検索(FA [X]);
     を返すFA [X]; 
} 
無効連合(int型 X、int型Y)// 将X、Y并为一个集合
{
     場合 =((X見つける。)!検索(Y))
        FA [(X)検索] = (y)を探します。
} 
int型のmain()
{ 
    CIN >> N >> M。
    以下のためにint型 i = 1 ; iが<= N; iは++ 
        FA [I] = I。
    以下のためにint型 I = 1 ; I <= M Iは++ 
        CIN >> E [I] .X >> E [I] .Y >> E [I] .DIS。
    ソート(E + 1、E + M + 1、CMP)。// 快排
    INT I = 1 ; Iは<= M、Iが++ 
    { 
        int型 F1を検索(E [I]が.X)、F2 = = ;検索(E [I]が.Y)
         IF!(F1 = F2)// もし異なる父親
        { 
            ANS = MAX(ANS、E [I] .DIS); // 更新回答 
            FA [F1 = F2;
             IF(K == N- 1BREAK ; // 少なくとも側面は点-1接続 
            ; ++ Kを// カウンター++ 
        } 
    } 
    COUT << ANS <<てendl; // 出力
    リターン 0 ; 
}

 

 

レビューの記録を提出

おすすめ

転載: www.cnblogs.com/chengyurui/p/11249180.html