燃やす埋める(Project Selection Problem)の練習問題についての解説です。
問題はこちら
ポイント
- (論理包含)タイプの制約
問題概要
頂点辺の有向グラフが与えられます.番目の辺は頂点から頂点へ向かう有向辺です.各頂点には整数が書かれており,各頂点ははじめ白で塗られています.次の操作を順に行うとき,黒で塗られている頂点に書かれた整数の和の最大値を求めてください.
操作: 個以上の頂点を選択し,選択した頂点からたどり着ける頂点を黒で塗る.
操作: 個以上の頂点を選択し,選択した頂点からたどり着ける頂点を白で塗る。
解説
燃やす埋める問題に関する基礎知識は以下の記事を参考にしてください.kanpurin.hatenablog.com
操作1のみしか行わない場合
操作のみしか行わない場合はARC085 E - MULと同じようにして解くことができます.操作を行った後に,黒で塗られた頂点から白で塗られた頂点へ向かう有向辺が存在してはいけません(黒で塗られた頂点から辿りつける頂点は黒で塗られているはずなので).したがって,有向辺すべてについて頂点が黒,頂点が白で塗られている場合にのコストをかけるようにすればよいです.
強連結成分はすべて同じ色になりますが,わざわざ強連結成分分解する必要はありません.
操作2も行う場合
操作で白に塗るのではなく赤に塗ると考えます.すると,先程と同様に考えることができ,黒白・赤白・赤黒,の頂点が存在する場合にのコストをかけるようにすればよいです.コストの表とグラフは以下のようになります.負辺は以下の記事に従って除去してください.最大流を求めるアルゴリズムとしてPush-Relabelを用いるとで求められます.Dinicも速いので間に合います.
他の燃やす埋める問題(Project Selection Problem)の例題については以下にまとめています.
kanpurin.hatenablog.com