P3780 苹果树 题解
夏天近了,又到了恋爱的季节,小Q家门前的苹果树上结满了红红圆圆的苹果。
这株苹果树是一个有着\(n\)个结点的有根树,其中结点被依次编号为\(1\)至\(n\)。\(1\)号结点为根,其余每一个结点的父结点一定是某个编号较小的结点。每一个结点上都有一些苹果,第\(i\)个结点上有\(a_i (a_i > 0)\)个苹果,每取走其中一个苹果就可以得到\(v_i (v_i > 0)\)的幸福度(若在这个结点取走\(k \leq a_i\)个苹果,则可以收获\(kv_i\)的幸福度)。如果在一个结点取走了至少一个苹果,则必须要在其父结点处取走至少一个苹果。
现在,给定正整数\(k\),请从树上取走若干苹果。如果总计取走了\(t\)个苹果,且所有取了至少一个苹果的那些结点的最大深度为\(h\)(这里规定根结点的深度为\(1\)),则要求\(t-h \leq k\)。问最大可以收获多少的幸福度?(这些幸福度全都归属于恋爱中的小Q。)
多组数据,\(T\le 5,n\le 2\times 10^4,k\le 5\times 10^5,nk\le 25\times 10^6,a_i\le 10^8,v_i\le 100\)。
选一个包含根的连通块,\(t-h\le k\),最大价值。算法明显是 \(O(nk)\) 的。
【简化版】
因为 \(t-h\le k\) 这个条件过于阴间了,尝试解决简化版 \(t\le k\)。
【\(a_v=1\)】
即使是简化版,也先考虑解决 \(a_v=1\) 的特殊情况。这种情况,每个结点只有选和不选两种情况。
采用 dfn 序 DP。\(dp[i][j]\) 表示目前考虑完 \(dfn\le i-1\) 的结点(\(i\) 待定),已经选了 \(j\) 个结点,且强制 \(i\) 的祖先们都选了,最大权值是多少。
刷表法转移,考虑 \(i\) 选不选。若 \(i\) 选,转移到 \(dp[i+1][j+1]\);若 \(i\) 不选,记 \(big[x]\) 为 \(x\) 子树中 dfn 的最大值,转移到 \(dp[big[i]+1][j]\)。
答案取 \(\max dp[n+1][0\sim n]\)。状态 \(O(nk)\),转移 \(O(1)\),总共 \(O(nk)\) 的复杂度。
【\(a_v\) 任意】
然后解决简化版的一般情况。状态描述不变,考虑怎么优化转移过程。
先考虑朴素的转移是怎么做的。若选 \(0\) 个,转移到 \(dp[big[i]+1][j]\);否则 \(dp[i][j]+w_i\times c\rightarrow dp[i+1][j+c]\),要求 \(c\ge 1\)。
不选的情况不用动,只需要优化选的情况。
令 \(g_j=\max_{1\le j-c\le a_i,c\ge 1}\{dp[i][c]+w_i\cdot (j-c)\}=w_i\cdot j+\max_{1\le j-c\le a_i,c\ge 1} dp[i][c]-w_i\cdot c\)。把 \(dp[i][c]-w_i\cdot c\) 视作 \(f[c]\),就是经典的滑动窗口问题,可以 \(O(k)\) 求出 \(g_0\sim g_k\)。
然后用 \(g_k\) 转移 \(dp[i+1][k]\)。
还是 \(O(nk)\) 的。
【原版】
\(h\) 可以看作是 "允许让一条链上的点免费取一个"。
【\(a_v=1\)】
新建一个 dfn2 序,和上面的 dfn 对儿子的访问顺序完全相反。然后新建一个 \(dp2[][]\) 按照 dfn2 的顺序 DP,状态定义和 \(dp[][]\) 一样。
在求出两个数组之后,枚举结点 \(v\) 为 "免费链" 的最下端结点,枚举 \(j1\) 为 "dfn 比 \(v\) 小的选的个数",\(dp[v][j1]+dp2[v][j2]+w_v\) 即为 \(v\) 的最大可能贡献。其中 \(j2\) 满足 \(j1-(d[v]-1)+j2-(d[v]-1)=k\)。
之所以加上 \(w_v\),是因为两个状态定义里 \(v\) 都是待定的,所以在最后把这个免费的 \(v\) 的权值加上。
【\(a_v\) 任意】
这里不能按上面做的原因,是 \(v\) 的祖先可以选不止一个,在 \(dp[v]\) 中是一种选法,在 \(dp2[v]\) 中又是不同的选法,情况不同当然不能直接合并。
那能不能让 \(v\) 的祖先的 \(a=1\) 呢?就相当于除了叶子结点的 \(a\) 都等于 \(1\)。
事实上是可以的,我们拆点,若 \(a_i>1\),给 \(i\) 额外拆出一个结点 \(new\) 作为儿子,\(a[new]=a[i]-1,w[new]=w[i]\) 然后 \(a[i]\leftarrow 1\)。这是等价的。
题解区第一篇是按照后序遍历的 dfn 写的,本质相同。