タイプ2の条件はひとまず無視して考える。
タイプ1のそれぞれの条件についてからに辺を張ったグラフを与えたとき、問われていることは「から入次数がの頂点を次々に消していくとき、最大で何個消せるか?」ということだった。この個数に消す順序は関係ないので、実際に自由に消していって確かめればよい。具体的には、入次数がの頂点をすべてキュー(あるいはスタック)に入れてBFS(あるいはDFS)をすればでできる。手順としては、キューから頂点を取り出したら、隣接頂点の入次数を1ずつ下げて、入次数がになったものをキューに入れればよい。あるいは、この制約ならBellman-Fordっぽく入次数が0の頂点の隣接頂点の入次数を下げる操作を周繰り返す、でもよさそう。()
タイプ2の条件については、
- を選ばないとする(=頂点は存在しないものとする)
- を選ぶ場合にはを先に選んでいなくてはならないとする。
の2通りを調べれば十分で、後者はタイプ1と同じなので上の問題に帰着できている。タイプ2の条件は十分に少ないので、通りのグラフを調べればよい。。