ああ...
トピックリンクします。https://www.luogu.org/problem/P2384
この質問は非常に水である、ログの首長が、その後どの乗っ0以来、1への最短セットの出発点に注意を払う、%%礼拝は、実際には、ここでは簡単なダイクストラで、積和演算の変更操作を表明して行うには番号は0を持っていました...」
ACコード:
1の#include <cstdioを> 2の#include <iostreamの> 3 4 使用して 名前空間STDを、 5 のconst int型 INF = 0x3f3f 。 6 INTの N、M、ヘッド[ 1000005 ]、VIS [ 1000005 ]、CNT、DIS [ 1000005 ]。 7 構造体ノード{ 8 INT から、に、次の、ヴァル。 9 } G [ 1000005 ]。 10 11インラインボイド追加(int型 U、int型 V、INT W){ 12 G [++ CNT]。= U; 13 G [CNT] .TO = V。 14 G [CNT] .next = 頭部[U]。 15 頭[U] = CNT。 16 G [CNT] .val = W。 17 } 18 19インラインボイドダイクストラ(INT X){ 20 のための(int型 I = 1 ; I <= N; iは++)DIS [I] =(Iの== 1?1:INF)。// 注意起点21 のための(int型 i = 1 ; iが<= N; I ++ ){ 22 のint = T 0、Y = INF。 23 のための(int型 J = 1 ; J <= N; J ++)場合(VIS [J] && DIS [J] <= Y!)Y = DIS [T = J]。 24 VIS [T] = 1 。 25 のために(INT DIS [G [J] .TO] =分(DIS [G [J] .TO]、DIS [T] *; J J = G [J] .next J =頭部[T])G [J] .val)。 26 } 27 のprintf(" %dの"、DIS [n]は%9987 )。 28 リターン; 29 } 30 31 INT メイン(){ 32 のint X、Y、Z。 33 のscanf(" %D%dの"、&N、&M)。 34 のために(int型 I = 1 {scanf関数(; I <= M I ++)は、 " %D%D%D "、およびX&Y、およびZ)。(x、y、z)を追加;} 35の ダイクストラ(1 )。 36 リターン 0 。 37 }
"