4月训练题解合集
由于我太懒了,所以就不每题开一篇写了。题目大意也懒得写了。 DAY1 1A 显然最优策略是瞎走,在知道那条边断掉了之后才走最短路径。 先把以 $T$ 为根的最短路树求出来,然后可以用堆求出断掉每条边后端点到 $T$ 的最短路径。 最后像 dijk 那样 DP 一下就好了。 1B 直接线段树 + 凸包优化 DP 可以轻松做到 $O(n\log n)$ 用 这个方法 可以优化到 $O(n)$ 1C 不同的环长只有 $O(\sqrt n)$ 种。 对每种环长算一下答案即可。 DAY2 2A 直接缩个点然后每个出度为 $0$ 的连通块扔掉最小值即可。 2B 用 这个东西 ,用平衡树维护序列即可。 DAY3 3A 如果可以修改一个 $a_i$ 满足 $\forall i,a_{i+1}<a_i+b_i \or a_{i+1}>a_i+c_i$,那么那一个人第一天就会发现。 如果可以修改两个,那么那两个人第二天都会发现。 现在就是要修改最少的 $a_i$ 满足上面那个东西。 可以 DP。枚举上一个没有修改的 $j$,那么要求 $[a_i-B_{i-1},a_i-C_{i-1}]\subseteq[a_j-B_{j-1},a_j-C_{j-1}]$。其中 $B,C$ 分别是 $b,c$ 的前缀和。 可以发现区间长度是单调的。 然后按