ARC117F Gateau

发布时间 2023-06-16 20:06:21作者: kyEEcccccc

题意

有一个 \(2N\) 个位置的圆,每个位置可以放任意多个物品(可以不放)。有 \(2N\) 条要求,形如第 \(i \sim i+N-1\) 范围内的位置上总共至少有 \(A_i\) 个物品(\(0\le i<2N\),其中第 \(j(j\ge 2N)\) 号位置其实是 \(j-2N\) 号)。问放置的物品总数至少为多少。

题解

首先断环为链。随后考虑前缀和。那么很容易表述前一半的限制,显然是一个差分约束不等式。后半部分怎么办呢?可以考虑整体减掉中间那段。可是不知道总和!没关系,答案显然具有可二分性,直接把总和枚举出来。于是我们得到这些限制(第 \(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 可以做到线性。