arc086-solution-post

ARC086 Solution

link


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 里。

posted @ 2024-02-27 20:20  iorit  阅读(15)  评论(0)    收藏  举报