joisc2009 冊子の配布(distribution)(難易度8)
解説AC 発想が全然思いつかなった
解説
(ACコードの都合上0-indexedで解説しています)
委員会の上下関係を委員長が根である根つき木と見る。
また、cost[i] = 根からiまでのパス上にいる人のやる気の総和を定義する。これは$ O(N)で求められる。
仮に$ M = 1とすると、答えはmax{cost[i](頂点iは葉)}になる。
次に$ M = 2とすると、まず$ M = 1のときに参加する人は参加したほうが良くて、その答えにさらにmax{cost[i](頂点iは葉)}を足せばいい(要証明)。$ M \leqq 3でも同様に足していくといい。
ただしこのままだと重複して数えられてる人が出てくるので、引かなくてはいけない。そこで、最初に$ M = 1に参加する人が決まったら、その人のやる気を0にしてしまうと、その後で足されることがない。
よって、計算量は$ M回cost[i]を求めるのがボトルネックになり、$ O(NM)になる。