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