1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 4 ブール CMP(対< 整数、整数 > A、対< INT、INT > B){ 5 であれば(a.second> b.second)リターン 1 。 6 場合(a.second == b.second)リターン a.first < b.first。 7 リターン 0 ; 8 } 9 10 INT メイン(){ 11 のint T。 12 cinを>> トン。 13 一方(t-- ){ 14 のint M、I、N。 15 CIN >> M >> I >> N。 16 int型K; 17 CIN >> K。 18 19 ベクター<ベクトル< 整数 >>グラフ(M、ベクトル< INT >(M、0 )); 20 int型のKI、KJ、キロワット。 21 のために(int型 i = 0 ; I <K I ++ ){ 22 CIN >> KI >> KJ >> KW。 23 グラフ[KI] [KJ] = KW。 キロワット。 25 } 26 27 ベクター< BOOL >訪問(M、0 ); 28 ベクター< INT >優しい(M - 1 )。 29 キュー< 整数 > TEMP。 30 temp.push(I)。 31 ながら(!temp.empty()){ 32 のintサイズ= temp.size()。 33 一方(size-- ){ 34 INT CUR = temp.front()。 35 temp.pop()。 36 訪問[CUR] = 1 。 37 のために(int型のx = 0 ; X <Mであり; x ++ ){ 38 場合(!訪問[X] &&グラフ[CUR] [X]> 0 &&フレンドリー[X] == - 1 ){ 39 フレンドリー[X] =フレンドリー[CUR] + グラフ[CUR] [X]。 40 temp.push(X)。 41 } 42 } 43 } 44 45 N-- 。 46 であれば(N == 0)破ります; 47 } 48 49 であれば(N =!0 || temp.empty()){ 50 COUT << - 1 << ENDL。 51 続けます。 52 } 53 54 ベクター<ペア< 整数、整数 >> RES。 55 56 地図< INT、INT > 存在します。 57 ながら(!temp.empty()){ 58が 存在する[temp.front()] = 優しい[temp.front()]。 59 temp.pop(); 60 } 61 res.assign(exist.begin()、exist.end())。 62 63 ソート(res.begin()、res.end()、CMP)。 64 のための(int型のp = 0 ; p <res.size(); P ++ ){ 65 COUT << RES [P] 1次回<< " " 。 66 } 67 COUT << ENDL。 68 69 } 70 71 }