AtCoder agc023_f - 01 on Tree

洛谷题目页面传送门 & AtC 题目页面传送门

题意见洛谷里的翻译,节点 \(i\) 权值为 \(a_i\)

这是个 AGC 的 F,挺吓人的。但是仔细看发现跟 P4437 差不多的,所以这是一个 AGC F 中的水题。(本来是不值得我发题解的,但是由于是 AGC 的 F 就随便写写吧……)

假设有 \(m\)\(1\),这个 \(m\) 显然是固定的。然后我们设 \(m\)\(1\) 的位置为 \(p_{1\sim m}\),这个 \(p\) 定下来整个序列显然也定下来了。对于 \(p\) 的一个取值,答案显然为 \(\sum\limits_{i=1}^m(n-p_i-(m-i))\)。随便推一下发现等于 \(m(n-m)+\dfrac{m(m+1)}2-\sum\limits_{i=1}^mp_i\)。于是题目转化为最大化 \(ans=\sum\limits_{i=1}^mp_i\)

仿照 P4437 的推(什么是套路?),我们考虑当前能选的节点集合中的任意两个点 \(x,y\),若 \(x\) 放最前面,尝试将 \(y\) 换到最前面来变得更优。我们统一使用「将 \(y\) 放到最前面,将 \(y\) 前面依赖于或等于 \(x\) 的全部顺移一位」这种方法来移动。

  1. \(a_x=a_y=0\):显然所有 \(1\) 都往后移了,\(ans\) 肯定增大,\sqrt{};
  2. \(a_x=a_y=1\):稍有一丝复杂,注意到所有人移动距离之和等于 \(0\)\(y\) 的移动占据了所有负贡献,而其他的又不全是 \(1\),所以最终对 \(ans\) 变化量的总贡献是负的,\times;
  3. \(a_x=0,a_y=1\):跟 \(2\) 类似,\times;
  4. \(a_x=1,a_y=0\):跟 \(1\) 类似,\sqrt{};

综合一下就是 \sqrt{} 当且仅当 \(a_y=0\)。合理性也挺好理解的,就跟 P4437 差不多嘛。然后如果没有 \(0\) 的话,那显然就随便选了……于是与爸爸合并。然后考虑合并以后该如何比较。不难发现 \(sz_id_i\) 守恒,然后 \(ans\) 的贡献总值是 \(\sum\limits_i cnt_id_i\)\(cnt_id_i=\dfrac{cnt_i}{sz_i}sz_id_i\),于是找 \(\dfrac{cnt_i}{sz_i}\) 当作最小的放在 \(y\) 处与唯一的负距离贡献相乘即可。

UPD:然后发现,\(\sum\limits_{i=1}^mp_i=\sum\limits_{i=1}^nia'_i\),那不就严格弱于 P4437 了吗?那我前面分析了那么多分析了个寂寞啊?

把 P4437 代码改几个字交上去就 A 了。

posted @ 2020-10-02 14:33  ycx060617  阅读(106)  评论(0编辑  收藏  举报