mini notes

競技プログラミングの解法メモを残していきます。

ABC041 D - 徒競走

問題:D - 徒競走

解答:Submission #15838027 - AtCoder Beginner Contest 041

解法:
bitDPでトポロジカルソートの通り数を数える。
考え方としては、「すでに使用した頂点集合」をbitとして持たせてDPする。すなわち入次数の小さい頂点から推移させていく。

まずは入次数が0の頂点に推移する。
また、ある頂点集合iから、i | j (jは頂点集合iに含まれない頂点)に推移するためには、頂点jに入る頂点が全て頂点集合iに含まれている必要がある。これは、頂点jに入る頂点集合をt[j]とすると、t[j] ⊂ i であることが必要である。