問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
1,...,N の番号のついた N 個の頂点とそれらをつなぐ枝からなる有向グラフを考えます。ただし、自己ループと多重辺は考えません。
M 本の有向枝と頂点番号 s, t が与えられます。頂点 s から頂点 t までの最短距離とその経路を出力してください。最短距離の経路が複数存在する場合は、そのうちのどれかひとつを出力してください。頂点 s から頂点 t へ経路が存在しない場合は、inf
と出力してください。
ただし、頂点 s から距離が同じ頂点が複数存在する場合は、そのなかで番号が最も小さい頂点を、頂点 s から最も距離が短い頂点とします。また、距離とはその頂点までの経路(枝の集合)を構成する枝の重みの和とします。
N M s t
a_1 b_1 c_1
...
a_M b_M c_M
合計一行または二行出力してください。経路が存在する場合は、一行目に頂点 s から頂点 t までの最短距離を出力し、二行目にはその経路で辿る頂点を順番に左から半角スペース区切りで出力してください。最短距離の経路が複数存在する場合は、そのうちのどれかひとつを出力してください。経路が存在しない場合は一行で inf
と出力してください。
また末尾に改行をいれ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
7 11 1 7
1 2 2
1 3 4
2 3 1
2 4 8
2 5 1
3 5 4
3 6 3
4 7 2
5 4 3
5 7 1
6 7 3
4
1 2 5 7
8 7 2 7
2 3 8
1 8 4
1 3 7
1 7 4
1 4 6
1 6 4
1 5 5
inf
5 6 1 5
1 2 1
1 3 1
2 3 1
2 4 2
3 4 2
4 5 5
8
1 2 4 5