珠链分割

题意

一个 N 个点N条边的连通图,每个点有权值。要求把其分割成 K 个部分,每个部分都满足连通性,且两两部分的点集无交集。然后选择一个部分,对该部分里是 在原图中环上的点 的权值平方。最后对于K个部分, 每个部分的所有点的权值和 取最小值。要求该最小值最大。

分析

我们先考虑如果原图是棵树怎么做。
首先二分答案,设二分的值为 Lim
f[u] 为以 u 为根的子树中最多能分成多少部分。
g[u]为以 u 为根的子树中分成最多部分的情况下,与根连通的节点的权值和最大值。
那显然有f[u]=f[v],   g[u]=g[v]+v[u]
其中, v u的儿子, v[u] u 的权值。
若最后g[u]lim,那么 f[u]=f[u]+1,   g[u]=0
因为每个部分是不能相交的,所以上式显然能得出最优的答案。

知道了树的情况怎么做,现在我们想想怎么解决多了一个环的情况。
同样二分答案。
很容易想到将环上所有点各当作根,对它们下面的点(除了根,不经过在环上的点)做一下上述的 dp ,同时对于根节点,不处理 g[u]Lim 的情况。最后我们知道了环上每个点向下能得到最多多少的权值,以及向下最多能组成多少个部分。先不考虑权值平方的问题,问题变成了一个带权环,问能否分成 K 部分,每个部分的权值和 Lim
将环切成链,再复制一倍。贪心,先处理出从每个点 l 出发,向后到最近的点r,使 i=lrv[i]Lim ,这个能线性扫一遍得出。令点 l 的父亲为点r+1,我们能得到一棵树一样的东西。我们枚举开头,看从那个点 u 开始,往父亲跳K步,最后到达一个点 v ,若v u 间隔没有超过环的长度,则说明环能分成K个满足条件的部分。对于跳 K 步,我们可以用倍增处理。
再考虑平方的问题,解决方法跟上述方法一样,只不过我们枚举的是要平方的部分的开头,可以知道它要到哪个位置才能使开头到这个位置组成的部分满足条件,剩下的就跟上面一样了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值