cafelier のSRM参加記録です。コンテスト中に考えてたことを執拗に全部書き残すとどうなるだろうかという試み本番中にこういうコードが書きたかったなあ、という後で書いた反省コードを書き残す試み
スパムが来たのでしばらくコメント欄をはてなユーザ限定にしています、すみません、
独立パス被覆はすべてパス被覆なので当然。
以下の補題より。
証明:数学的帰納法。頂点数 1 のグラフでは両辺共に 1 なので成立する。
頂点数 k のグラフで成立したとする。頂点数 k+1 のグラフ G の極小端点独立パス被覆P={p1,p2,...,pn}を1つ適当に選ぶ。
p1 = v11 -> v12 -> ... -> v1' -> u1 p2 = v21 -> v22 -> ... -> v2' -> u2 ... pn = vn1 -> vn2 -> ... -> vn' -> un
ter(P) = {u1, ..., un} 同士を結ぶ辺が1個もなかったら、これが独立点集合なので証明終わり。u1 -> u2 という辺があった場合は、ややこしくなる。
Fact: u1 -> u2 という辺がある場合、p2は単一頂点パスp2={u2} ではない(仮にそうだとするとp1の後ろにu2を繋げてみるとPの極小端点性に反する)
主張: u2を除いたグラフを考えると、さっきのパス被覆Pからu2を除いたP'
p1 = v11 -> v12 -> ... -> v1' -> u1 p2'= v21 -> v22 -> ... -> v2' ... pn = vn1 -> vn2 -> ... -> vn' -> un
これも、u2除去後のグラフの極小端点独立パス被覆になっている。
これを認めると、帰納法の仮定より、u2除去後のグラフにはサイズ n の独立点集合がある。u2を入れ直してもこれは独立点集合である。
主張の証明: 極小じゃなかったとする。ter(Q)⊊ter(P')な被覆があったことになる。場合分け
証明終。
証明: 独立パス被覆の辺を全部使うとそれはマッチングになっている。つまり、各vについて、v<出口>から出てる辺は高々1本しか選んでないし、v<入口>に入る辺は1本しか選んでない。
独立パス被覆 P について |Pのパスの本数| + |Pに含まれる辺の数| = |V| なので、↑この作り方で |V|-|Pのパスの本数| サイズのマッチングが少なくとも得られた。
presented by cafelier/k.inaba under