[ZJOI2019] Minimax搜索 题解
感觉是道好题,我们先稍微理一下思路。
首先,我们定义在初始状态下,根节点的权值为
先考虑一个差分的技巧,即我们对于每个
我们先假设我们此时通过枚举知道了
我们发现一个比较
初始值就是叶子节点
转移应该比较简单,分讨一下当前节点的奇数和偶数深度即可。答案就是
但是你会发现这样会算重,就是说有的
考虑有没有什么办法能够做到只考虑
我们思考一下根节点这个
我们发现这条链上只要有一个点的权值发生了变动那么根节点的权值就会发生改变。
更具体的,如果我们将这条链上的边拆开,这样这棵树就会变成若干个连通块,每个连通块的根节点就是这条链上的节点。我们只需要求出每个连通块根节点改变的概率即可。(其实也就是方案)
考虑一个事情,对于连通块一个点
故我们定义
-
的深度为奇数,小小的容斥转移, -
的深度为偶数,
最终答案就是对于每个连通块的根节点
对于
此时对于每一个
采用最普通的树剖求解复杂度为
代码好难写,先提供一份暴力作为对该思路的参考和理解。正解直接套动态 DP,因为作者时间紧张,所以省略了。正解代码见此博客。
当然中间有一些细节,就是你动态 DP 在修改的时候要抵消之前的贡献,而这里面的贡献可能有