ARC117F Gateau
题意
有一个 \(2N\) 个位置的圆,每个位置可以放任意多个物品(可以不放)。有 \(2N\) 条要求,形如第 \(i \sim i+N-1\) 范围内的位置上总共至少有 \(A_i\) 个物品(\(0\le i<2N\),其中第 \(j(j\ge 2N)\) 号位置其实是 \(j-2N\) 号)。问放置的物品总数至少为多少。
\(1\le N\le 1.5\times 10^5,1\le A_i\le 5\times 10^8\)。
题解
首先断环为链。随后考虑前缀和。那么很容易表述前一半的限制,显然是一个差分约束不等式。后半部分怎么办呢?可以考虑整体减掉中间那段。可是不知道总和!没关系,答案显然具有可二分性,直接把总和枚举出来。于是我们得到这些限制(第 \(i\) 个位置放了 \(B_i\) 个物品, \(S_i = \sum\limits_{j=0}^{i-1}B_j\),枚举出的总和为 \(K\)):
\[\begin{cases}
S_i &\le S_{i+N} - A_i& &(0\le i\le N - 1)\\
S_{i+N} &\le S_i + K - A_{i+N}& &(0\le i\le N - 1)\\
S_i &\le S_{i+1}& &(0\le i < 2N - 1)\\
S_{2N-1} &\le S_0 + K\\
\end{cases}
\]
于是你把 \(S_{0 \sim 2N-1}\) 建出点来差分约束跑个 SPFA!自然是 T 飞了。考虑这个图的性质。你发现把 \(i\) 和 \(i+N\) 分成一层的话基本是个单向的结构,唯一有往回边的一个是 \(S_0\) 往 \(S_{2N-1}\),一个是 \(S_N\) 往 \(S_{N-1}\)。于是负环要么包含 \(0\),要么包含 \(S_N \to S_{N-1}\)。那么你从 \(0\) 开始跑最短路,以及从 \(N-1\) 开始跑最短路,检查它们附近的点最后的距离是否为非负即可。这个过程是不需要 SPFA 的,直接 DP 可以做到线性。