1つの#include <ビット/ STDC ++ H> 2 の#define PBの一back 3 の#defineため_for(iは、B)(; iは<(B)は、i ++は、I =(A)INT) 4 の#define INF INT_MAX 5 の#defineは長い長いっ 6 7 使って 名前空間STDを、 8 9 のconst int型 MAXN = 500003 。 10 インラインLLリード() 11 { 12 のLLのANS = 0 。 13 チャー CH = GETCHAR()、=最後' ' 。 14 しばらく(!isdigit(CH))最後の= CH、CH = getchar関数(); 15 一方(isdigit(CH))ANS =(ANS << 1)+(ANS << 3)+ CH - ' 0 '、CH = GETCHAR()。 16 であれば(最後== ' - ')ANS = - ANS。 17の リターンANS; 18 } 19インラインボイドライト(LLのX) 20 { 21の 場合(X < 0)は、x = -x、のputchar(' - ' )。 22 であれば(X> = 10)、書き込み(X / 10 )。 23 のputchar(Xの%10 + ' 0 ' )。 24 } 25 構造体端部 26 { 27 LLに、 28 LLコスト; 29 }。 30ベクター<エッジ> G [MAXN]。 31 32 LLのV、E。 33 34のtypedef対<-1,11,11-> P。// 最初の是最短距离、第是顶点编号 35 LL D [MAXN]。 36 ボイドshortest_path(LL秒) 37 { 38 PRIORITY_QUEUE <P、ベクトル<P>、大きな<P >>QUE; 39 40 _for(I、1、V + 1 ) 41 D [I] = INF。 42 D [S] = 0 ; 43 que.push(P { 0 、S})。 44 45 ながら(!que.empty()) 46 { 47 P、P = que.top(); que.pop()。 48 LLのV = p.second。 49 であれば(D〔V〕<p.first)続けます。 50 _for(I、0 、G [V] .size()) 51 { 52 エッジe = G [V] [I]。 53 であれば(D [e.to]> D [V] + e.cost) 54 { 55 D [e.to] = D [V] + e.cost。 56 que.push(P {D [e.to]、e.to})。 57 } 58 } 59 } 60 } 61 62 のint main()の 63 { 64 番目、ED LL。 65 V =読み取る()、E =リード()、STは= read()は、ED = 読み取ります(); 66 // のscanf( "%D%D%D"、&V、&E、&ST)。 67 _for(I、0 、E) 68 { 69 のLL S、T、C。 70個の S =)は、Tが読み取ら=()(読み取り、= C )(読み取ります。 71 // のscanf( "%D%D%D"、&S、&T&C)。 72 G [S] .push_back(エッジ{T、C})。 73 G [t]は.push_back(エッジ{S、C})。 74 } 75 shortest_path(ST)。 76 ライト(D [ED])。 77 // のprintf( "%dの"、D [I])。 78 リターン 0 。 79 }