1つの#include <ビット/ STDC ++ H> 2 の#define PBの一back 3 の#defineため_for(iは、B)(INT I =(A); iが++; iが(B)<) 4 の#define INF十億三を 5 の#defineは長い長いっ 6 7 使って 名前空間STDを、 8 9 のconst int型 MAXN = 2000003 。 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 V LL、E、B、 33は 34であるのtypedef対<LL、LL> P; // まず第頂点番号、最短距離であり、 35は 、LL D [MAXN] 36 LL T [MAXN]; 37 [ LL ANS [MAXN]。 38 ボイド shortest_path(int型S) 39 { 40 PRIORITY_QUEUE <P、ベクトル<P>、大きな<P >> QUE。 41 42 _for(I、1、V + 1 ) 43 D [I] = INF。 44 D [S] = 0 ; 45の ANS [S] = 1 。 46 que.push(P { 0 、S})。 47 48 ながら(!que.empty()) 49 { 50 P、P = que.top(); que.pop()。 51 のint = V p.second。 52 もし(D [V] <p.first)続けます。 53 54 _for(I、0 、G [V] .size()) 55 { 56 エッジe = G [V] [I]。 57 であれば(D [e.to]> D [V] + e.cost) 58 { 59 D [e.to] = D [V] + e.cost。 60 que.push(P {D [e.to]、e.to})。 61 } 62 であれば(D [e.to] == D [V] + e.cost) 63 { 64 ANS [e.to] + = ANS [V]。 65の ANS [e.to]%=100003 ; 66 } 67 } 68 } 69 } 70 71 のint main()の 72 { 73 V =読み取る()、Eは= リード()。 74 75 _for(I、0 、E) 76 { 77 のLL S、T、C。 78 のS =)は(読み取り、TはC =)(読み取り= 1 。 79 // のscanf( "%D%D%D"、&S、&T&C)。 80 G [S] .push_back(エッジ{T、C})。 81 G [t]は.push_back(エッジ{S、C})。 82 } 83 shortest_path(1 )。 84 _for(I、1、V + 1 ) 85 のprintf(" %d個の\ n " 、ANS [I])。 86 リターン 0 ; 87 }