arc086-solution-post
ARC086 Solution
D - Non-decreasing
如果 \(a_i\) 全部同号那么做一遍前缀和或者后缀和就好了。
怎么搞成同号的呢?考虑找出绝对值最大的数,给全部数加上它即可。
E - Smuggling Marbles
总和转期望,最后再乘上方案数。
注意到深度相同的节点可以分开考虑,不会互相影响。
考虑一个朴素 dp:\(dp_{u,i,0/1}\) 表示 \(u\) 子树内(在全树中)深度为 \(i\) 的点移到 \(u\) 点时有 \(0/1\) 个石子的概率。
初始:自己的自己深度全部是 \(\{\frac12,\frac12\}\)
转移:
\[dp_{u,i,1}\gets\sum_{v}dp_{v,i,1}\prod_{w\neq v}dp_{w,i,0}
\]
即这一层只能由一个石子。
\[dp_{u,i,0}\gets1-dp_{u,i,1}
\]
这样是 \(\mathcal O(n^2)\) 的。
考虑一个经典的长剖优化:子树内最长链的最下面一段的一层是只有 \(1\) 个点的,无需进行转移。
那么每次只转移次长链的长度,复杂度是线性的。
具体地,实现时用 vector 存 \(dp\) 数组,因为要深度从小到大加入值,可以把 \(dp\) 数组反过来存进 vector 里。

浙公网安备 33010602011771号