题目描述
题解
我们设 f [ x ] [ j ] [ k ] f[x][j][k] f[x][j][k]表示运输完了以 x x x为根的子树, i i i的祖先 j j j建立了伐木场,建立了 k k k个伐木场的最小运输代价。由于题目中说明了0号点一定要建立伐木场,故结果是 f [ 0 ] [ 0 ] [ K ] . f[0][0][K]. f[0][0][K].
我们可以将这道题拆分成两部分,我们另f数组表示在当前状态下,不选择选择 i i i的最小花费; g g g数组表示选择节点 i i i。有与 f [ x ] [ j ] [ k ] f[x][j][k] f[x][j][k]中的 j j j树 x x x的祖先,因此我们用一个栈记录节点 x x x的父亲即可。这里记为 f a = s t a c k [ j ] fa=stack[j] fa=stack[j],用 j j j枚举。
因为我们需要求出的时子树的答案,用 f [ x ] f[x] f[x]表示已经不选择 x x x的的, g [ x ] g[x] g[