【BZOJ3714】Kuglarz

フェイス質問

http://darkbzoj.tk/problem/3714

問題の解決策

書式#include <cstdioを> 
する#include <iostreamの> 
の#include <CStringの> 
の#include <アルゴリズム>
 に#define里レジスタint型
 の#define N 2050
 使って 名前空間はstdを、
構造体の縁{
   int型、U、V、L。
  ブール 演算子 <(constのエッジ&RHS)のconst {
     戻り L < rhs.l。
  } 
} E [N * N]。
INT F [N]。
int型のn;
INT FindRootで(INT X){
   場合(F [X] == x)をリターンバツ;
  戻り F [X] = FindRootで(F [X])。
} 
int型のmain(){
   int型のx、CC = 0 
  scanf関数(" %のD "、&N)
  (RI i = 1 ; I <= N; I ++ のための(RI J = I; J <= nであり、j ++ ){ 
      scanf関数(" %のD "、&x)は、
      E [ ++ CC] =(エッジ){I、J + 1 、X}。
    } 
  ソート(E + 1、E + CC + 1 )。
  INT TOT = N + 1 にとって(RI i = 1 ; iが<= N + 1を、iが++)F [I] = iは、
  長い 長い ANS = 0 ;
  (RI i = 1 ; iは= CCを<; iは++ ){
     int型、U = FindRootで(E [I] .U)、V = FindRootで(E [I] .V)。
    もし(!U = V){ 
      ANS + = E [I] .L。
      F [U] = V。
      TOT - ;
      もし(TOTの== 1 ){ 
        のprintf(" %LLDする\ n " 、ANS)。
        リターン 0 ; 
      } 
    }
  }
  リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/shxnb666/p/11275439.html