HDU-6187.DestroyWalls(最大スパニングツリー)

  さて、この質問は、少し何も言うことはありません....

  そしてまた、それは取り除かスパニングツリーの最大の側の最大の波の中で、議論に大きな兄の始まりは、余分なエッジを持っていないだろう、後ろを振り返ると、リングが以下であるため、サイドの問題が発見され、最小ライン上にダウンサイド。

書式#include <cstdioを> 
する#include <CStringの> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、

const  int型 MAXN = 100000 + 5、MAXM = 200000 + 5 int型N、M、ANS、ヘッド[MAXN]。
BOOL VIS [MAXM]。
構造体のエッジ{
     int型U、V、W。
}エッジ[MAXM]。

BOOL CMP(CONSTエッジ&、constのエッジ&B){
     戻り AW> BW。
} 

int型の検索(INT X){
    もし(x ==ヘッド[X])戻りX。
    他の リターンヘッド[X] = 検索(ヘッド[X]); 
} 

int型のmain(){
     int型X、Y。
    一方、(〜のscanf(" %d個の%のD "、&​​N、&M)){ 
        ANS = 0 
        memsetの(VIS、はsizeof VIS)。
        以下のためにint型私= 1 ; iが<= N; iが++ ){ 
            scanf関数(" %D%D "、およびX&Y)。
            ヘッド[i]は =私; 
        } 
        のためにint型 i = 0 ; iがmを<; iは++ ){ 
            scanf関数を(" %D%D%D "、およびエッジ[I] .U、&エッジ[I] .V、&エッジ[I] .W) ; 
        } 
        ソート(エッジ、エッジ + M、CMP)。
        int型 CNT = 0、NUM = 0 ;
        以下のためにint型私= 0 ;私がm <; Iは++ ){
             int型の FX =探す(エッジ[I] .U)、FY = (エッジ[I] .V)を探します。
            もし(FX!= 年度){ 
                CNT ++; 
                ヘッド[FX] = FY。
                VIS [i]は = ; 
            } 
            であれば(CNT == N - 1ブレーク
        } 
        のためのint型 I = 0 ; iが<M; iが++ ){
             場合(!{VIS [i])と
                ANS + = エッジ[I] .W。
                NUM ++ ; 
            } 
        } 
        のprintf(" %D%D \ n " 、NUM、ANS)。
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/bianjunting/p/10958258.html