USACO 2023 January Contest, Platinum 题解
Tractor Paths
题意:给定 \(n\) 个不交区间,两个区间之间有边当且仅当这两个区间的交非空。\(Q\) 次询问,每次给定 \(u,v\),求从 \(u\) 到 \(v\) 的最短路和最短路可能经过的点点权和。\(n,Q\le 2\times 10^5\)。
题解:求最短路是简单的,每次从 \(u\) 开始,每次贪心跳到尽可能右边的区间,直到跳过 \(v\),这个可以用倍增维护。考虑可能经过的点,我们将 \(u\) 贪心右跳直到跳出 \(v\) 和 \(v\) 贪心左跳直到跳出 \(u\) 的路线画出来,发现其实就是对应的 \(len\) 个区间和查询,这个也可以倍增维护。
Mana Collection
题意:有 \(n\) 个能量池,第 \(i\) 个能量池每秒增加 \(m_i\) 能量,能量池之间有一些边 \((u,v,w)\),表示从 \(u\) 到 \(v\) 要 \(w\) 秒。经过一个能量池时可以取出所有能量并清空这个能量池的能量,\(Q\) 个询问,给定 \(s,e\),询问 \(s\) 秒内最终停在 \(e\) 处取出的能量最多多少。\(n\le 18,Q\le 2\times 10^5,s\le 10^9\)。
题解:取出最多能量就是没取出的能量最少。状压 DP,记录经过了哪些能量池,加入一个新的能量池时贡献是到这个能量池的时间乘上之前就经过了的能量池的 \(m_i\) 之和,因为经过的我们肯定不会再经过了,这些能量就浪费了。离线处理询问,本质上是很多个直线,求一个点的最值,用类似李超树的分治即可,或者求凸包也行。
Subtree Activation
题意:有一个 \(n\) 个点树,初始时每个点都是暗的,一次操作可以反转一个点,要求对每个 \(u\),\(u\) 的子树全部点亮,且 \(u\) 子树外的点全部暗,至少一次,并且最终所有点都是暗的,问最少操作次数。\(n\le 2\times 10^5\)。
题解:考虑一个点肯定会被开关开关若干次。用 \(dp_{u,i}\) 表示 \(u\) 这个点,可以免费开关开关 \(i\) 次,(开算 1 次,关也算 1 次),子树每个点都被完成过的代价。然后这个免费开关是可以分给子树的,当然你也可以付费开关,这样会导致代价增加,子树多一次免费开关的机会,转移是个树形背包的形式。大胆猜测开关次数是 \(O(\log_n)\) 的,树背包是 \(O(nm)\) 的,因此复杂度 \(O(n\log n)\)。
本文来自博客园,作者:xay5421,转载请注明原文链接:https://www.cnblogs.com/xay5421/p/17100580.html