P5024 保卫王国[倍增+dp]
窝当然不会ddp啦,要写这题当然是考虑优化裸dp啦,但是这题非常麻烦,于是变成了黑题。 首先,这个是没有上司的舞会模型,求图的带权最大独立集。 不考虑国王的限制条件,有 \[ dp[x][0]+=dp[y][1]\\ dp[x][1]+=min(dp[y][1],dp[y][0]) \] 现在考虑限制条件,如果对每一个限制条件都做一次dp,复杂度达到 \(O(n^2)\) ,无法承受。 显然,对于这些限制条件,每一次的变动不会影响其它大多数的状态。 对于一个限制条件,我们分开考虑,先考虑只对一个城市进行限制的情况。 若该城市被要求驻扎军队,那么如果在最优情况下它本来就需要军队,则没有影响;如果它本来不需要军队,由于此时所有子树都是最优解,那么 它只会对从它到根节点的路径的最优解产生影响 。 若该城市被要求不能驻扎,那么与上面的情况类似,如果它本来需要驻扎,那么会对它到根节点的路径造成影响。 综上所述,我们是否可以考虑对于每个限制条件,只对两个点到根节点之间的路径的某些状态进行修改呢?答案是肯定的。 假设待修改节点为 \(x\) 。首先,此时除了 \(x\sim root\) 的路径上的节点所表示的状态,其它状态都是最优的。对于这条路径的更新,实际上就是又对这条路径做了一次dp,并强制 \(x\) 选或不选,从而限制转移。 显然这是可行的,但是复杂度仍为 \(O(n^2)\)