燃やす埋める(Project Selection Problem)の練習問題についての解説です。
問題はこちら
ポイント
- 最大化を最小化へ言い換える
- グラフ表現可能なコストの性質
- 2部グラフの性質を用いたの選択肢の順序変更
問題概要
頂点数、辺数の二部グラフおよび各頂点の重みが与えられます。番目の辺は頂点と頂点を結んでいます。このグラフにおける最大重み独立集合を求め、重みの和を出力してください。最大重み独立集合とは独立集合のうち、頂点の重みの和が最大となるもののことです。
解説
燃やす埋める問題に関する基礎知識は以下の記事を参考にしてください.kanpurin.hatenablog.com
各頂点を独立集合として[選ばない/選ぶ]を選択します。頂点を選ぶ際のコストは以下のようになります。[選ぶ]との利得が発生するのでのコストがかかると考えます。これは頂点を選んだ際も同様です。
各辺について、頂点と頂点をともに[選ぶ]ことはできないのでともに[選ぶ]を選択するとのコストが発生するようにします。
このままだとうまくグラフを作ることができないので二部グラフの性質を利用します。頂点の選択肢の順番を入れ替えると以下のようにグラフで表せるコストの形になりました。二部グラフであることから、とを結ぶ辺しかなく、全てのコストがこの形で書けることが分かります。
負の辺()が存在するため、あらかじめを加算しておくことで、[選ばない]を選択した際にがかかると考えることができます。
以上をまとめるとコストは以下のようになります。
この最小コストが最小カットとなるようなグラフが構築でき、例えば入力例2では以下のようなグラフが構築できます。を[選ぶ]ときは側の集合に、[選ばない]ときは側の集合に割り当てることを意味し、を[選ぶ]ときは側の集合に、[選ばない]ときは側の集合に割り当てることを意味します。このときの側の頂点から側の頂点に向かう辺の重みの和がカットのコストとなります(この辺の話は他の資料が詳しいです)。
として、頂点数は、辺数はです。Dinicを用いると時間計算量で解くことができます。
他の燃やす埋める問題(Project Selection Problem)の例題については以下にまとめています。
kanpurin.hatenablog.com
提出プログラム
[]感想
燃やす埋めるの基本的な問題でした。タイトルがヒントになっているので難易度は水色にしました。