题解:P3577 [POI2014] TUR-Tourism
lupengheyyds · · 题解
P3577 [POI2014] TUR-Tourism
可能很多人看到这道题既可以从父亲更新到儿子,又可以从儿子更新到父亲的时候,很多人都跟我一样是这样的:
于是这里分享一下我的一种思考。
直径
首先求出这个树的欧拉序,下文中
令
-
如果
x_{i-1}=fa_{x_i} 也就是说这是一条向下的边,考虑x 的的决策:-
如果
x_i 选择,那么当前节点的状态无论如何都是0 ,考虑与x_i 有边的一个祖先z : -
如果
z 的状态为0,2 ,则s 不作改变。 -
如果
z 的状态为1 ,则s\to s+2\times 3^{dep_z} 。 -
如果
x_i 不选择,那么看当前节点有没有被自己的祖先覆盖: -
如果没覆盖,则
s\to s+3^{dep_{x_i}} 。 -
如果被覆盖,则
s\to s+2\times 3^{dep} 。
最后让
dp_{i,s}\leftarrow dp_{i-1,j} 。 -
-
如果
fa_{x_{i-1}}=x_i ,也就是说这是一条向上的边,直接dp_{i,j}=\min\{dp_{i-1,j},dp_{i-1,j+2\times 3^{dep_{x_{i-1}}}}\} 。
最后一棵树的答案就是
其实我们没有必要真正的把欧拉序列求出来,直接在 DFS 遍历的过程中求一下就行了,复杂度