AtCoder Beginner Contest 223 G 問題 Vertex Deletion
問題
提出解答
問題の概要
グラフ の最大マッチングの大きさを とする. 木 に対し, を満たす頂点の数を求めよ.
制約
- グラフは木
解法1: を求める.
まず, を求めることにする. 木DP で求めることにする. を適当な頂点 を根とする根付き木とする. 頂点 に対して, で, 「頂点 を根とする部分木で, 頂点 をマッチングに含め (る/ない) 場合の最大の大きさ」とする. このとき, で頂点 の子全体の集合とすると,
である.
(理由)
- について, 頂点 を根とする部分木のうち, 頂点 を使わないので, 各 に対して, を根とする部分木の問題に帰着できる. を根とする部分木における最大マッチングの大きさは であるので, この総和になる.
- について, のとき, を根とする部分根付き木は 頂点しかないので, である. とする. 頂点 と をマッチングさせるとする. 以外の子を根とする部分木においては上の場合と同様, を根とする部分木においては, を使わない最大マッチングを採用することになる. そして, この は任意に選ぶことができる. よって,
となる.
このとき, である.
解法2: 条件を満たす頂点を求める.
各頂点 に対して, であることと, であることは同値になる. 解法1を参考にすることにより, 各頂点を根とする根付き木において, ] を求められれば良さそうである. ただし, 実際にそうすると, 計算量が となり間に合わない. しかし, 各頂点を根と見なした場合の値がほしいので, 全方位木DPで求めることになる.
全方位木DPで求めるために, を頂点集合として, 適切な集合 と, モノイド 及び, を構築する.
- モノイド
このとき, 遷移は として,
である.
以上から, 全方位木DP によって, 計算量 で求めることができた.