[6]テンプレート最小スパニングツリー(クラスカル)

 

 

 

 

 

 

書式#include <iostreamの> 
の#include <cstdioを> 
する#include < 文字列の.h> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
構造体P 
{ 
    int型のX;
    int型のyを。
    int型のトン。
} ZYF [ 200001 ]。
BOOL CMP(P XXを、PのY-Y)
{ 
    戻り xx.t < yy.t。
} 
int型の合計= 0、和= 0 INT FA [ 5001 ]、Z、N、M、A、B、K。
INT getfather(INT W)
{
    もし(FA == [W] w)の
     リターン; W 
    FA [W] = getfather(FA [W])。
    戻りFAを[W]。
} 
ボイド一緒に(int型 Uを、INT O)
{ 
    FA [getfather(U)] = getfather(O)
} 
int型のmain()
{ 
    // freopenは( "テストデータ(23).IN"、 "R"、STDIN)。
    CIN >> N >> M。
    以下のためにint型 iは= 1 ; iがn = <; iは++ 
    { 
        FA [I] = I。
    } 
    のためにint型のI =1 ; I <= M; iは++ 
    { 
        CIN >> ZYF [I] .X >> ZYF [I] .Y >> ZYF [I] .T。
    } 
    ソート(ZYF + 1、ZYF + M + 1 、CMP)。 
    以下のためにint型 I = 1 ; I <= M; iが++ 
    { 
        場合(getfather(ZYF [I] .X)=!getfather(ZYF [I] .Y))
        { 
            一緒に(ZYF [I] .X、ZYF [ I] .Y)。 + = ZYF [I] .T。
            INT J = 1 ; J <= nであり、j ++ 
            { 
                int型 CC =getfather(J)。
                もし(CC == j)の
                合計 ++ ; 
            } 
            であれば(全== 1 ブレーク
            合計 = 0 ; 
        } 
    } 
    もし(合計== 1 
    COUT << 和。
    他の
    { 
        裁判所未満 << ORZ 
    } 
    戻り 0 
}

                        夏の十四日までに2019年9月9日

おすすめ

転載: www.cnblogs.com/north-star/p/11489423.html