Processing math: 72%

G: DAG トリオ / DAG Trio

この問題は D: DAG Trio (Easy) と制約のみが異なる同じ設定の問題です。

プロローグ

弟は最近「だぐとりお」が欲しいとしきりに呟いています。 心配になった兄が調べたところ、弟のクラスでは k-DAG (有向グラフであって、ある k 個の辺を削除すると、辺の向きを無視したときの連結成分数を k にでき、かつそれら全てが DAG である) が流行っており、 3-DAG を特に DAG トリオと呼ぶことを突き止めました。 弟に尊敬されたい兄は、与えられたグラフが DAG トリオかどうかを判別するプログラムを作成することにしました。

問題文

N 頂点 M 辺の有向グラフが与えられます。 各頂点には 1 から N まで番号が振られています。 各有向辺には 1 から M まで番号が振られています。 有向辺 i は頂点 ai から bi に向かいます。 グラフは連結かつ単純です (辺の向きを無視すると、任意の 2 点間に道があり自己ループと多重辺がありません)。 与えられたグラフが DAG トリオならば ”YES”、そうでないなら ”NO” を出力してください。

入力

N M
a1 b1
a2 b2

aM bM

制約

3N500
\max(3, N−1) \le M \le 30000
1 \le a_i, b_i \le N
グラフは辺の向きを無視したときに連結である。
各 i に対してa_i \neq b_i
異なる i, j に対して \{a_i, b_i\} \neq \{a_j, b_j\}

出力

”YES” または ”NO” を 1 行で出力してください。

サンプル

サンプル入力1

3 3
1 2
2 3
3 1

サンプル出力1

YES

サンプル入力2

6 7
1 2
2 3
4 3
4 5
5 6
6 4
3 6

サンプル出力2

YES

サンプル入力3

7 10
4 2
4 7
4 6
2 7
2 5
2 1
5 6
1 3
6 3
4 3

サンプル出力3

NO

サンプル入力4

4 4
1 2
3 2
4 3
2 4

サンプル出力4

YES

サンプル入力5

8 9
5 1
3 8
1 2
4 8
4 7
7 5
6 5
3 2
4 2

サンプル出力5

YES