CF1307G
题意:
给出一个 \(n\) 个点 \(m\) 条边的有向图,每条边有边权 \(w_i\) 。
有 \(Q\) 次询问,每次询问给出一个 \(x\) 。你可以把一条边修改成 \(w_i+a_i\) (\(a_i\) 不一定是整数),不过需要保证 \(a_i \geq 0\) 且 \(\sum a_i \leq x\) 。
你要通过修改边权使得从 \(1\) 到 \(n\) 的最短路径尽可能长,每次询问之间独立。
数据保证至少存在一条从 \(1\) 到 \(n\) 的路径,无重边自环。
输出答案和标准答案的相对误差或绝对误差应不超过 \(10^{-6}\) 。(翻译来自luogu)
分析
先观察一下费用流的LP:
\(min:z=\sum flow_i \cdot cst_i\)
限制:
$ \[\begin{cases} u=1时:\sum\limits_{i \in out_u}-flow_i=-F\\ u\in[2,n-1]: \sum\limits_{i \in out_u}-flow_i+\sum\limits_{i\in in_u}flow_i=0 \\ u=n时:\sum\limits_{i \in in_u}flow_i=F \\ flow_1 \leq cap_1 \\ flow_2 \leq cap_2 \\ ...... \\ flow_m \leq cap_m \\ \forall i \in [m],flow_i \geq 0 \end{cases}\]$
转对偶LP:
\(max: z=F(y_n-y_1)+\sum\limits_{i=1}^{m}y_{n+i}\cdot cap_i\)
限制:
\(\begin{cases} \forall (v,u) \in E:y_u-y_v+y_{n+i} \leq cst_i \\ \forall i \in [n+1,n+m] ,y_{i}\leq 0\end{cases}\)
因而令\(\forall i \in [n+1,n+m], x_{i-n}=-y_i\)
对偶LP为: \(max: z'=F(y_n-y_1)-\sum x_i\) \(\begin{cases} \forall (v,u) \in E:y_u-y_v\leq cst_i+x_i \\ \forall i \in [1,m] ,x_{i}\geq 0\end{cases}\)
很明显,这里的\(y_n-y_1\)就是最短路,整个对偶的LP的限制与题目相符。
令这对LP的最优解的值为\(t\),那么\[F(y_n-y_1)-\sum x_i \leq t\] \[y_n-y_1\leq \frac{t+\sum x_i}{F}\]
因此我们只要求\(\frac{t+\sum x_i}{F}\)的最小值。只要在费用流每次增广的时候几下对应的\((flow,cst)\),每次询问在这些点里算最小值即可.
代码
1 |
|