// HDU 1863
書式#include <cstdioを>
書式#include <CStringの>
const int型INF = 0x3f3f3f3f。
N INT、M。
INT G [105] [105]。
ブールread_input(){
(!のscanf( "%d個の%d個"、&nは、&M)== 2 && n)の場合はfalseを返します。
memsetの(G、INF、はsizeof(G))。
U、V、E int型。
{(;; I = N!++ iが0 = INT)について
scanf関数( "%D%D%D"、およびuは、&V、&E)。
IF(E <G [U] [V]){
G [U] [V] = G [V] [U] = E。
}
}
trueを返します。
}
INT [105]を言います。
INT力[105]。
{プリムボイド()
int型の合計= 0;
int型CNT = 1;
{(; I <= M ++ iは1 = INT)のために
DIS [I] = G [1]〜[I]。
[I] = 0図です。
}
VIS [1] = 1。
以下のために(INT i = 0;!I = M-1; ++ I){
= INFからあなた。
int型トン= 1000;
(INT J = 1; J <= M; ++ j)のための{
(もし!VIS [J] && DIS [J] <ミネソタ州){
DISによる= [J]。
T = J;
}
}
もし(T == 1000)休憩。
合計+ =ミネソタ州。
力[I] = 1。
CNT ++;
(INT J = 1; J <= M; ++ j)のための{
IF(!VIS [J] && DIS [J]> G [t]は[J]){
伝える[J] = G [t]は[J]。
}
}
}
IF(CNT == M)のprintf( "%d個の\ n"、合計)。
他のprintf( "\ nは?");
}
{int型のmain()
一方、(read_input()){
堅苦しい();
}
0を返します。
}