問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
有向グラフ G について、下図の通り、全ての辺が同じ方向になるように頂点を一列に並べることを「トポロジカルソート」といいます。
・有向グラフ G
・トポロジカルソート後の G
トポロジカルソートは全ての有向グラフについて可能という訳ではありません。例として下図のようなグラフでは頂点をどのように並べても逆向きの辺が現れてしまいます。
グラフの頂点・辺についての情報が与えられるので、このグラフがトポロジカルソート可能であるかを出力してください。
なお、このグラフには、多重辺や自己ループはないものとします。
・ヒント
入力されるグラフがトポロジカルソートが可能だと仮定して考えてみましょう。
トポロジカルソートが可能な場合、「入次数が 0 の頂点と、その頂点と繋がっている辺を削除する」操作を繰り返すことで全ての頂点を削除することができます。
このことを実際に試してみることでトポロジカルソート可能かを判定することができます。
例としてトポロジカルソート後の G に対してこの処理をおこなうと次のとおりになります。
N M
a_1 b_1
...
a_M b_M
与えられたグラフがトポロジカルソート可能である場合は "Yes" を、そうでない場合は "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 3
2 4
Yes
5 9
1 3
2 4
2 5
5 1
2 1
1 2
3 4
3 5
1 5
No