問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
1,...,N の番号のついた N 個の頂点とそれらをつなぐ枝からなる有向グラフを考えます。ただし、自己ループと多重辺は考えません。
M 本の重み付き有向枝と頂点番号 s が与えられます。頂点 s からほかのすべての頂点へ向かう経路の最短距離を出力してください。頂点 s からの枝の移動では到達不可能な場合は inf
と出力してください。
ただし、経路(枝の集合)の距離とはその経路を構成する枝の重みの和とします。ある頂点からその頂点自身へ移動する場合は、その区間の重みを 0 とします。
なお、頂点 s から各頂点への最短距離はベルマンフォード法を利用して求めてください。ベルマンフォード法は、
頂点 s から各頂点への最短距離を更新できるかどうか枝をひとつひとつチェックするという操作を(頂点の数)- 1 回繰り返すというアルゴリズムです。
N M s
a_1 b_1 c_1
...
a_M b_M c_M
合計 N 行出力してください。j 行目には、頂点 s から頂点 j へ向かう経路の最短距離を出力してください (1 ≦ j ≦ N)。到達不可能な場合は inf
と出力してください。
また末尾に改行をいれ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
5 5 1
1 2 4
1 3 9
2 4 1
4 5 3
5 2 3
0
4
9
5
8
5 7 1
1 2 1
1 5 10
2 3 1
2 5 7
3 4 1
3 5 4
4 5 1
0
1
2
3
4
8 9 1
1 2 2
1 4 1
1 6 3
2 3 2
3 8 2
4 5 1
5 8 1
6 7 3
7 8 3
0
2
4
1
2
3
6
3