zyb 的 ABC293H - Optimal Path Decomposition

题目

link

思考

我自己的想法是 d p ( u , 1 / 2 ) dp(u,1/2) dp(u,1/2) 表示在 u u u 的子树中,有 1 / 2 1/2 1/2 个子树的根和 u u u 颜色相同,从 u u u 开始单条路径的最小的最大颜色数。然后每个点统计答案在取最大。这其实是不对的,因为这样统计各子树的答案时,整棵树的结构是不确定的。所以我们希望能在 dp 的每一步确定最优的状态。

我们又发现 d p ( u , 2 ) dp(u,2) dp(u,2) 状态下的子树答案一定不大于 d p ( u , 1 ) dp(u,1) dp(u,1) 状态下的,而 d p ( u , 1 ) dp(u,1) dp(u,1) 可以减小全局的答案。因此,我们希望能有一个标准:如果 u u u 的子树中的答案较大那么就用 ( u , 2 ) (u,2) (u,2) 状态优化子树,如果子树中的答案较小,那么就用 ( u , 1 ) (u,1) (u,1) 优化全局。所以我们想到二分答案。

细节上,注意到 ( u , 1 ) (u,1) (u,1) 的优化效果很小( ≤ 1 \le1 1),而 ( u , 2 ) (u,2) (u,2) 对子树优化很大,可能仍对全局更优,所以我们还是应当判断 d p ( u , 1 ) dp(u,1) dp(u,1) d p ( u , 2 ) dp(u,2) dp(u,2)

正解

首先二分答案。然后树 dp 得到 d p ( u ) dp(u) dp(u) 以及采取状态 1 / 2 1/2 1/2。过程中我们在子树的根上检查子树的合法性,以及判断采取策略。

rec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值