#include <cstdioを> する#include <iostreamの> する#include <CStringの> する#include <アルゴリズム> 使用して 名前空間STDを、 int型 INF = 99999999 ; int型の電子[ 2001 ] [ 2001 ]、DIS [ 10000000 ]、ブック[ 10000000 ]、ANS [ 1000000 ]。 INT のmain(){ int型私は、J、N、M、T1、T2、T3、U、V、MMIN。 scanf関数(" %d個の%のD "、&N、&M)。 用(i = 1 ; iは= <N; I ++ ) のための(J = 1; J <= nであり、j ++ ){ 場合(I == j)は、E [I] [J] = 0 ; 他の E [i]の[J] = infファイル。 } もし(M == 0 ){ のprintf(" 無回答" )。 リターン 0 ; } のための(i = 1 ; I <= M; iは++ ) { scanf関数(" %D%D%D "、&T1、およびT2、およびT3)。 E [T1]、[T2] = 分(E [T1]、[T2]、T3)。 } のための(i = 1 ; iが<= N; iが++ ) DIS [I] = E [1 ] [i]は、 ANS [ 1 ] = 1。DIS [ 1 ] = 0 ; 用(i = 1 ; I <= N- 1、I ++ ){ MMIN = INF。 U = 0 ; 用(J = 1 ; J <= nであり、j ++ ){ 場合(ブック[j] == 0 && DIS [J] < MMIN){ MMIN = DIS [J]。 uが = jは、 }} もし(U == 0)ブレーク。 ブック[U]= 1 ; 用(J = 1 ; J <= nであり、j ++ ){ 場合(ブック[j] == 0 && DIS [J]> DIS [U] + E [U] [J]) {DIS [J] = DIS [Uを] + E [U] [J]。 ANS [J] =のANS [U]。 } それ以外の 場合(ブック[J] == 0 && DIS [J] == DIS [U] + E [U] [J] && J =!1 ) ANS [J] + = ANS [U]; } } もし(DIS [N] == INF)のprintf(" 無回答" )。 printf(" %dの"DIS [N]); のprintf(" %dの」、ANS [N]); 戻り 0 ; }