ARC083 E: Bichrome Tree
Livedoorブログからの移動
はてなブログからの移動
解き方
- ある頂点
iの部分木について、黒白それぞれの重みの和を、b_i, w_iとして、それを更新していく- 黒白は入れ替えても問題ないので、違う色か同じ色かだけ考えれば良い
- 頂点
iがleafの場合、色はどちらでもよく、重みはx_iになる - 頂点
iがleafでない場合- 子どもの重みの割当
b, wをそれぞれまず計算する iへ色と重みを割り当てると、b_i = x_iまたはw_i = x_iを満たすが、ここでx_iでない方はできるだけ小さい方がその後の重み割当がしやすくなる- 頂点
iの子どものリストをc_1, c_2, ..., c_nとして、dp[j][k] = c_1, ... c_iまでを使って、重みの和がjになるような色の割り当て方があるかどうか(true, false)と定義してDP dp[n][k] = trueとなる最大のkを用いてiへの色の割当を考える
- 頂点
- 子どもの重みの割当
- 計算量の見積もり(怪しい)
- DPについて:
k <= X_iとして問題なく、さらに各辺について、1回しかこのDPで参照されないので、解法全体を通してO(NX)で収まるはず dp[n][k] = trueなる最大のkを求める:O(X)- これは各頂点について行われるので、解法全体で
O(NX)
- これは各頂点について行われるので、解法全体で
- 解法全体では
O(NX)のはず
- DPについて: