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\) 的全部顺移一位」这种方法来移动。
- \(a_x=a_y=0\):显然所有 \(1\) 都往后移了,\(ans\) 肯定增大,\sqrt{};
- \(a_x=a_y=1\):稍有一丝复杂,注意到所有人移动距离之和等于 \(0\),\(y\) 的移动占据了所有负贡献,而其他的又不全是 \(1\),所以最终对 \(ans\) 变化量的总贡献是负的,\times;
- \(a_x=0,a_y=1\):跟 \(2\) 类似,\times;
- \(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 了。