ABC216G 01Sequence
解説AC
牛ゲーとのことで、解法は公式解説を見るのが良いかと思います。
ここでは、自分なりの理解をつけ足したいと思います。
牛ゲーについては、別記事にまとめました。
また、ネットで調べると色々出てきます。
牛ゲーを適用するには、以下を満たす必要があります。
- 2値の差分の制約しかない
- 値を最大化する
そこで今回、
- 1の数を最小化する
ことを、
- 0の数を最大化する
と言い換えをすることが1つポイントだと思います。
次に、以下の3つが今回の制約です。
制約1は自明かなと思います。
制約3は、0の数を最大化する問題とみなし、1の個数の制約を0の個数の制約に変換することで導き出されます。
制約2ですが、を1にすればとなり、を0にすればとなります。そこで、多重辺をもつような場合はどうなるのかという疑問が出ました。
おそらくですが、「0以下または1以下」なので大きい方の1以下のみが採用されます。これが、「0以下かつ1以下」であれば、0以下が採用されると思います。
牛ゲーでは、
という制約を「からへの重みの有向辺」
とみなします。これに従って、3つの制約式から有効辺を追加し、を始点とした最短経路問題を解きます。重みが非負なので、ダイクストラ法が適用できます。
あとは、について、
- なら、そうでなければ、
としてを構築できます。