ひとりで勝手にはじめた蟻本読書会 最大流問題と最小カット問題 蟻本読書会 の続きです。

二部グラフの最大マッチング問題

グラフ理論における二部グラフとは、頂点集合を2つに分割して各部分の頂点は互いに隣接しないようにできるグラフです。一般に互いに隣接しない頂点からなる集合を独立集合といい、頂点集合を n 個の独立集合に分割可能なグラフのことを n 部グラフといいます。

マッチングとは,端点を共有しない枝の集合です。グラフが与えられたときに要素数最大のマッチングを求める問題を最大マッチング問題といいます。

最大流問題は二部グラフの最大マッチング問題を解くときにも使えます。二部グラフの左にsource、右にsinkを配置し、sourceとAの各頂点、sinkとBの各頂点をリンクで繋ぎ、各リンクの容量を1とすると、最大マッチングは最大流と一致するのです。

C – 2D Plane 2N Points

C – 2D Plane 2N Points

二次元平面に,赤い点と青い点が N 個ずつあります。i 個目の赤い点の座標は (a_i, b_i) で i 個目の青い点の座標は (c_i, d_i) です。合計 N × 2 個の点はすべて異なる座標にあります。またX座標であったりY座標が同じ点はありません。

赤い点と青い点は、赤い点の x 座標が青い点の x 座標より小さく、赤い点の y 座標も青い点の y 座標より小さいときに仲良しペアになれます。

最大で何個の仲良しペアを作ることができますか? ただし 1 つの点が複数のペアに所属することはできません。

入力されるデータ
N
a_1 b_1
a_2 b_2

a_N b_N
c_1 d_1
c_2 d_2

c_N d_N
(ただし 1 ≦ N ≦ 100, 0 ≦ a_i, b_i, c_i, d_i < 2N)

source と sink、そして赤い点を表す頂点、青い点を表す頂点をつくります。赤と青の点はそれぞれ N 個ずつあるので頂点は全部で 2 * N + 2 個になります。そしてsource と赤い点を表す頂点を辺でつなぎます。さらに仲良しペアになれる赤い点を表す頂点と青い点を表す頂点を容量 1 の辺でつなぎます。最後に青い点を表す頂点と sink を辺でつなぎます。

こうしてできたグラフの最大流問題を考えます。これがこの問題の解となります。