AtCoder Beginner Contest 222 E 問題 Red and Blue Tree
問題
提出解答
問題の概要
頂点からなる木がある. この木の 本の辺を赤または青で塗る. このとき, 以下を満たすような塗り方は何通りか?
(条件) の順に, 駒を頂点 から頂点 へ最短路で移動させる. 回の移動終了後, 赤の辺の総通過回数を , 青の辺の総通過回数を としたとき, である.
制約
- 与えられるグラフは木である.
解法
与えられるグラフを とする. 本の各辺 に対して, を
とする. このとき, 求める条件は, で, パスにある辺の集合とすると,
となる. ここで, シグマの交換を行い, 変形することにより, この条件は
になる.
ここで, 各 について, ] については, BFS を行うことにより, 簡単に求めることができる. これを とすることにより,
とおくと, 個の における をあわせて で求めることができる.
よって, 問題は以下のように帰着することができる.
非負整数 が与えられる. このとき, に対して, を または に割り当てる方法のうち,
を とする. このとき, なので,
になる. これはまさしく部分和問題である. この部分和問題は動的計画法により, 計算量 で求めることができる. ただし, 右辺が整数にならない場合や, 負の場合は, 動的計画法を経由せずに, と答えなければならない.
以上から, 全体の計算量 で解答を求めることができた.