[图论记录]ARC117F Gateau

command_block

2021-10-29 09:21:58

Personal

**题意** : 有一个长为 $2n$ 的环形数组 $A$ ,全为自然数。 给出 $2n$ 条约束,约束 $i$ 形如:从 $A_i$ 开始的半环的和 $\geq B_i$ 。 在满足所有约束的情况下,最小化 $\sum A$ 的值,回答这个最小值。 $n\leq 1.5\times 10^5$ ,时限$\texttt{3s}$。 ------------ 考虑二分,判定答案是否 $\leq M$ 。 记 $S$ 为 $A$ 的前缀和。 $S$ 合法的充要条件是: - $S_{i-1}\leq S_i$ - $S_0=0,S_{2n}=M$ 即 $S_{2n}-S_0\geq M$ - 对于 $i\in[1,n]$ ,$S_{n+i}-S_{i-1}\geq B_i$ - 对于 $i\in[n+1,2n]$ ,$X-(S_i-S_{i-n-1})\geq B_i$ 都能写成差分约束的形式,只需判定是否有负环。 - $i\rightarrow i-1:0$ - $2n\rightarrow 0:M$ - 对于 $i\in[1,n]$ ,$n+i\rightarrow i-1:B_i$ - 对于 $i\in[n+1,2n]$ ,$i-n-1\rightarrow i:B_i-X$ SPFA 判负环复杂度不太对劲……我们需要一个更加有理有据的方式。 显然这些点两两可达,不妨只考虑 $2n$ 出发的最短路。 观察这张图: ![](https://cdn.luogu.com.cn/upload/image_hosting/4mycg4m7.png) 我们将 $2n\rightarrow 0$ 的边断开,再将点 $n$ 删除,那么图就变成两条链,之间有若干边。 此时不存在环,最短路可以 DP 求。求出 $n-1,n+1,0,2n$ 两两的最短路。 然后将点 $n$ 和边 $2n\rightarrow 0$ 加入,只和 $n-1,n+1,0,2n$ 连接,最后对 $5$ 个点的图判负环即可。 复杂度 $O(n\log A)$ 。 ```cpp ```