小白 44 F 题题解

幽暗统领

https://ac.nowcoder.com/acm/problem/231982

张果老——醉酒抛杯踢连环

Back \Leftarrow

问题模型

你获得了 nn 条链,第 ii 条链的长度是 aia_i

给这 ai\sum a_i 个点再连上 n1n-1 条边,使得它们构成一个包含 ai\sum a_i 个结点的“大树”。

请输出最终 可能 成为“大树”重心的结点的个数。

模型分析

对于第 ii 条链的第 jj 个结点(以下简称点 (i,j)(i,j)):

  • 首先很明显根据“重心”定义,最优策略是把剩下 n1n-1 条链全部作为子树挂上去。

  • 进而分析有解的条件,也就是说:

  • x=j1,y=aijx=j-1,y=a_i-j(第 jj 个点之前、第 jj 个点之后的结点数)

  • 所以 a1,a2,,ai1,ai+1,,an,x,ya_1,a_2,\cdots,a_{i-1},a_{i+1},\cdots,a_n,x,y 共同构成点 (i,j)(i,j) 的子树。

据此只需要判断:

max{a1,a2,,ai1,ai+1,,an,x,y}ai2\max\{a_1,a_2,\cdots,a_{i-1},a_{i+1},\cdots,a_n,x,y\}\le\left\lfloor\dfrac{\sum a_i}{2}\right\rfloor

不妨考虑拆解这个式子:

{max{a1,a2,,ai1,ai+1,,an}ai2max{x,y}ai2\begin{cases}\max\{a_1,a_2,\cdots,a_{i-1},a_{i+1},\cdots,a_n\}\le\left\lfloor\dfrac{\sum a_i}{2}\right\rfloor\\\max\{x,y\}\le\left\lfloor\dfrac{\sum a_i}{2}\right\rfloor\end{cases}

第一个式子可以考虑预处理除去 aia_i 之后的序列 max\max 值,O(n)O(n) 扫描即可。

第二个式子可以考虑对于一个 aia_i 批量计算(在满足了一式的前提下),考虑奇偶分讨:

由图示结论可得,aia_i 的贡献是:

  • aia_i 为偶数:min(jiaj2×2+2,ai)\min\left(\left\lfloor\dfrac{\sum\limits_{j\ne i}a_j}{2}\right\rfloor\times2+2,a_i\right)

  • aia_i 为奇数:min(jiaj2×2+1,ai)\min\left(\left\lceil\dfrac{\sum\limits_{j\ne i}a_j}{2}\right\rceil\times2+1,a_i\right)

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
05-27 11:41
已编辑
点赞 评论 收藏
转发
3 收藏 评论
分享
牛客网
牛客企业服务