感觉这个年代已经没有人知道什么是对偶了。
对偶原理与线性规划详见2016集训队论文(没看过而且不知道什么是对偶的可能看不懂我这博客在讲什么)
maximize cTxs.t. Ax≤b x≥0
对偶于
minimize bTxs.t. ATx≥c x≥0
其中b,c,x皆为列向量,A为矩阵,AT为矩阵的转置。
这两个最优化问题的答案相等。(强对偶)
一张图很生动的描述了对偶现象的形式。
LP对偶费用流就是对于一个最大费用循环流问题。
s.t. maximize u,v∑costu,vfu,vfu,v≤capu,vi∑fj,i−i∑fi,j≤0i∑fi,j−i∑fj,i≤0fu,v≥0
第一行是费用,第二行是流量限制,第三行和第四行是流量守恒。
一定要注意上面的这个线性规划,他的cT是什么,他的x是什么,他的A长什么样子,那样看到对偶形式的时候才不会蒙圈。
但是这里要说明的是,我们应该在第三行和第四行中只留下一个,因为在一个图中,每个点入度 ≤出度即可构成入度=出度。
对偶形式:
vi,j+ϕi−ϕj≥costi,jminimize∑vi,j×bi,j
这里的ϕi和ϕj其实,在我们上面的A矩阵中,就是最下面几行构成的变量,每列只会有三个地方有值,变量为vi,j,+ϕ(i),−ϕ(j),又因为原来是≤0,所以计算最小值的时候不需要考虑ϕ(i)造成的贡献。
而这道题正好满足下面这个线性规划,可以对偶成最大费用循环流,把所有正权边强制选了之后把入度出度不相等的点向T/从S连边,然后变成有源汇最大费用最大流(要流量平衡所以需要最大流)。