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