浅谈一类树上贪心问题

浅谈一类树上贪心问题

这一类问题的套路是考虑先将局部顺序确定,最后合并以及确定顺序的连通块得到最后答案。

UVA1205 Color a Tree

考虑一个点 \(u\) 的左右儿子是 \(a\)\(b\) 连通块,\(c_a\) 表示 \(a\) 里的点数,\(s_a\) 表示 \(a\) 里的点权和,如果对于 \(u\),先走了 \(a\) 再走 \(b\),这样的代价会是 \(c_us_a + (c_u + c_a)s_b\),否则代价会是 \(c_us_b + (c_u + s_b)s_a\)

如果先走 \(a\) 优于先走 \(b\),则 \(c_as_b < c_bs_a\Longrightarrow \dfrac{c_a}{s_a} < \dfrac{c_b}{s_b}\),容易发现该条件具有传递性,所以可以根据这个来确定合并所有点的顺序。

AT_agc023_f [AGC023F] 01 on Tree

这题是类似的,设 \(a\)\(1\) 的个数是 \(\beta_a\)\(0\) 的个数是 \(\alpha_{a}\),如果先走 \(a\) 优于先走 \(b\),则 \(\beta_a\alpha_b < \beta_b\alpha_a\Longrightarrow \dfrac{\beta_a}{\alpha_a} < \dfrac{\beta_b}{\alpha_b}\),容易发现该条件具有传递性,所以可以根据这个来确定合并所有点的顺序。

HDU6326 Monster Hunter

这题是拼好题,怪猎题有经典贪心,我们假设经过 \(i\) 需要消耗 \(a_i\),HP 会增加 \(b_i\)(包含消耗的 HP,这里的 \(b_i\) 是原题中 \(b_i - a_i\)):

如果先走 \(i\) 再走 \(j\),那么最后的 \(a\) 会变为 \(\max(a_i, a_j-b_i)\),否则会是 \(\max(a_j, a_i - b_j)\)

  1. 如果 \(b_i, b_j \ge 0\),那么显然会先走 \(a\) 最小的。
  2. 如果 \(b_i \ge 0, b_j < 0\),那么显然会先走 \(i\)\(b_j\ge 0, b_i < 0\) 会先走 \(j\)
  3. 如果 \(b_i, b_j < 0\),考虑上面的式子,如果先走 \(x\) 更优,则 \(\max(a_i, a_j-b_i) < \max(a_j, a_i - b_j)\),这等价于 \(a_i < \max(a_j, a_i - b_j), a_j-b_i < \max(a_j, a_i - b_j)\),第一个式子是显然成立的,因为 \(a_i-b_j>a_i\),第二个式子等价于 \(a_j-b_i<a_i-b_j\Longrightarrow a_j+b_j<a_i+b_i\)

综上所述,该条件具有传递性,所以可以根据这个来确定合并所有点的顺序。

posted @ 2025-07-21 11:49  MoyouSayuki  阅读(21)  评论(0)    收藏  举报
:name :name