CF F.ロイヤルの質問は、クラスカル

コード: 

#include <ビット/ STDC ++ H> 
の#defineは長い長いちゃう   
の#define MAXN 200004 
名前空間stdを使用します。  
setIO(文字列s){無効
    "に" = S内の文字列+します。
    freopenは(in.c_str()、 "R"、STDIN)。
}は
N INT、M。   
INT P [MAXN]、[MAXN]タグ。
{INITを無効()
    [I] = iがP(++ iは; iがMAXNを<I = 0をINT)ため、  
} 
INT(INT X){見つける
    ?戻りP [X] == X X:Pは[X] =(P [X])を見つけます。  
} 
構造体のエッジ{ 
    U、V、C int型。
} [MAXN]編。         
BOOL CMP(エッジA、エッジB){ 
    AC> BCを返します。
} 
int型のmain(){ 
    // setIO( "入力")。  
    その中に(); 
    scanf関数( "%d個の%のD"、&N、&   
    (I 1 = int型; I <= M; ++ i)のためのscanf( "%D%D%D"、&ED [I] .U、&ED [I] .V、&ED [I] .C)。   
    ソート(ED + 1、ED + 1 + M、CMP)。  
    LL ANS = 0。
    以下のために(INT I = 1; I <= M; ++ I){ 
        見つける= =検索(ED [I] .U)、BをINT(ED [I] .V)。       
        もし(!= B &&(タグ[A] ||タグ[B])!!)ANS + = 1LL *編[i]の.C、タグ[A] | =タグ[B]、P [B] =; 
        それ以外の場合(!== bの&&タグ[A])ANS + = 1LL *編[i]の.C、タグ[A] = 1;         
    }    
    のprintf( "%I64dの\ n"、ANS)。
    0を返します。
}

  

おすすめ

転載: www.cnblogs.com/guangheli/p/11263392.html