公式

D - みんな仲良し高橋君 解説 by yosupo

解説の補足

この問題を解くのに重要な補題として次がありますが、解説スライドではまともに証明されていません。

  • 2次元平面上の2N個の異なる点\((x_1, y_1), (x_2, y_2), \cdots, (x_{2N}, y_{2N})\)が与えられる。
  • 2N頂点のグラフを考え、\(x_i = x_j\)\(y_i = y_j\)を満たす、またそのときのみ辺\((i, j)\)を張る。
  • この時、グラフが連結ならば必ずこのグラフは完全マッチングを持つ。

この補題を数学的帰納法で証明します。\(N=1\)ならば明らかなので\(N \geq 2\)とします。

グラフが連結ならば全域木が取れます。頂点数が\(2N \geq 4\)であることから、全域木の高さが \(2\) 以上となるように根を選ぶことができ、この時に最も高さの高い頂点(のうち一つを) \(u\) とします。\(u\) は明らかに葉であり、\(u\)の親を \(p\)\(u\) の親の親を \(q\) とします

  • \(p\) の次数が \(2\), つまり \(u\) のみを子として持つ場合: マッチング \((u, p)\) を取れば \(N\) が一つ小さい場合に帰着されます
  • \(p\) の次数が \(3\) 以上、つまり \(u\) 以外の子を持つ場合: \(u\) 以外の子を一つ選び、\(v\) とします。 \(u\) の選び方から \(v\) も葉であることに注意します。辺の張り方から、 \((u, v), (u, q), (v, q)\) のうち少なくとも一つは辺が存在します。
    • \((u, v)\) が存在する場合: マッチング \((u, v)\) を取ればいいです。
    • \((u, q)\) が存在する場合: マッチング \((v, p)\) を取ればいいです。
    • \((v, q)\) が存在する場合: マッチング \((u, p)\) を取ればいいです。

投稿日時:
最終更新: