フェイス質問
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 ; }