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}\) 二分中直接删去最后一维即可。

posted @ 2021-12-05 15:10  Point_King  阅读(27)  评论(0编辑  收藏  举报