問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
有向グラフ G について、下図の通り、全ての辺が同じ方向になるように頂点を一列に並べることを「トポロジカルソート」といいます。
今回は幅優先探索を用いてトポロジカルソートを実装してみましょう。
入力されるグラフがトポロジカルソートが可能だと仮定して考えてみましょう。
トポロジカルソートが可能であるための必要十分条件は、「【入次数が 0 の頂点とその頂点から伸びている辺を削除する操作】を繰り返すことで全ての頂点を削除することができる」です。
このことを実際に試してみることでトポロジカルソート可能かを判定することができます。
この手順で頂点を削除していった順番がそのままトポロジカルソートされた頂点の順番となります。
グラフの頂点・辺についての情報が与えられるので、このグラフがトポロジカルソート可能であるかを判定し、トポロジカルソートが可能である場合はトポロジカルソートをした後の頂点番号を順に出力してください。
なお、このグラフには、多重辺や自己ループはないものとし、頂点の出力は「辺の向きが最初に出力した頂点から最後に出力した頂点に向かうように」出力するものとします。
なお、トポロジカルソートした結果が複数存在する場合はそれらのうち 1 つを出力してください。
N M
a_1 b_1
...
a_M b_M
与えられたグラフがトポロジカルソート可能である場合は、「辺の向きが最初に出力した頂点から最後に出力した頂点に向かうように」各頂点を改行区切りで出力してください。トポロジカルソートが不可能である場合は "No" を出力してください。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 200
・ 1 ≦ M ≦ N × (N - 1) / 2
・ 1 ≦ a_i,b_i ≦ N
4 5
1 2
2 3
3 4
1 4
2 3
1
2
3
4
5 7
1 2
2 3
3 4
1 4
2 3
2 5
5 2
No