P4383 [八省联考 2018] 林克卡特树
涛神让我写,我就来了。
提示:题目并不难。
首先切掉边之后的连边是非常头疼的。
假设我们已经确认断哪些边,那么很显然的,我们就考虑贪心地链接边,让连通块用直径做贡献。
哦,题目被我们转化成了断开 \(k\) 条边,使得剩下每一部分的直径之和最大,边权存在负数。
那树形 \(\text{dp}\) 应该是可以做的。
经过涛神的剧透,猜到了是 \(\text{wqs}\) 二分。/fn
那我们来尝试一下列出没有 \(k\) 的限制的 \(\text{dp}\) 方程,我们相当于有两种大选择——断边或者不断边。对于不断边来说,我们又有两种选择,将合并的作为当前的连通块的取值,或者是继续等待,那么实际上我们就需要清空。
我们定义 \(f_{u,k,0/1}\) 表示子树 \(u\) 在当前连通块最深点为深度为 \(k\) 且该连通块答案并未计算/计算的贡献。
我们考虑合并两棵子树 \(u,v\) 。
\[f_{u,k,0}=\max(f_{u,k,0}+\max_{k'}f_{v,k',1},f_{u,k,0}+\max_{k'+dis_{u,v}\le k}f_{v,k',0},f_{v,k-dis_{u,v},0}+\max_{k'\le k}f_{u,k',0})\\
f_{u,k,1}=\max(f_{u,k,1}+\max_{k'}f_{v,k',1},\\
f_{u,k,1}+\max_{k'+dis_{u,v}\le k}f_{v,k',0},f_{v,k-dis_{u,v},1}+\max_{k'\le k}f_{u,k',0},\\
f_{u,k,0}+\max_{k'+dis_{u,v}\le k}f_{v,k',1},f_{v,k-dis_{u,v},0}+\max_{k'\le k}f_{u,k',1},\\
dis_{u,v}+f_{u,k,0}+k+\max_{k'+dis_{u,v}\le k}f_{v,k',0}+k',\\
dis_{u,v}+f_{v,k-dis_{u,v},1}+k-dis_{u,v}+\max_{k'\le k}f_{u,k',0})+k')
\]
这个东西应该是可以用长剖加线段树优化到 \(O(n\log_2n)\) 的,考虑再加入 \(\text{wqs}\) 二分的部分,总复杂度应该是 \(O(n\log_2n\log_2A)\) 的。
我的做法真垃圾。
于是,问题就变成了最大化 \(k+1\) 条不相交的链的链上边权总和。
设状态 \(f[0/1/2][u][k]\) 表示以 \(u\) 为根的子树(且 \(u\) 的度数为 \(0/1/2\) )中,选 \(k\) 条链的最优解。
在 \(\text{wqs}\) 二分中直接删去最后一维即可。