Soohの嘆き呟き

競プロ解説記事をかくぞ。

JOI 2009 春合宿 day4 distribution(冊子の配布)

  • 問題

atcoder.jp

  • 解き方

木構造で何かしらの最大を求める問題は木dpっぽさを感じたので、この方針で突っ込んだ。

自分の子が持つべき情報は、何冊もらった時にどれだけのやる気を得ることができるかのテーブル。

この情報があれば、普通のdpの遷移と同じようにやれる。

つまり、

dp[v][i] := vを根とする部分木に i 冊配った時のやる気の総和の最大値

と定義する。

dp[v].size() = m として全頂点でdpをすると、遷移的にO(NM^2)になって間に合わないので、二乗の木dpというテクニックを使って高速化。

これは

木と計算量 前編 〜O(N^2)とO(NK)の木DP〜 - あなたは嘘つきですかと聞かれたら「YES」と答えるブログ

の解説を参考にするとよい。

 

  • 自分の提出

Submission #21851215 - 2009年 日本情報オリンピック春合宿OJ