bzoj 3112 从 线性规划 到 网络流 浙江oi2013 战线防守

来源:互联网 发布:钣金下料软件 编辑:程序博客网 时间:2024/04/29 23:38

线性规划约束条件中如果每个变量在且只在两个约束条件中出现,并且系数为+1、-1,则可构造出网络流模型。

题意:战线看作长度为n的序列,现在需要在这个序列上建塔,在i号位置上建一座塔有ci花费。有m限制,每个限制形如区间[li,ri]中至少有di个塔。求最小花费。

内容太长,先说网络流建图方法:
先搞s、t,再加n+2个结点(为了方便,前后各加一个),i向i+1连边,容量无穷,费用0;
对于题目中给出的m个限制,li1ri连边,容量无穷,费用di;
s向i连容量为ci+1的边,费用0;i向t连容量为ci的边,费用0;
跑最大费用最大流

思路:
si为前i个位置塔的数量。
可以得到:

目标函数(最小化):

i=1n(sisi1)ci

约束条件:
srisli1di
sisi10
si0

到这里,单纯形已经可搞啦!

注意到每个约束条件只有两个变量出现,并且是+1和-1,单纯形直接忽略了这个特性。
为了构造网络流模型,要先对原问题求对偶:
pri,li1表示第一个约束条件对应的变量,qi,i1表示第二个约束条件对应的变量。
得到:

目标函数(最大化)

i=1npri,li1di

约束条件
qi,i1qi+1,i+jpi,jjpj,icici+1
q,p0

将等式看作点,将变量看作边。由于每个变量只在两个等式出现,一正一负,恰好表示流入和流出。

把约束条件表示成松弛形式

qi,i1qi+1,i+jpi,jjpj,ici+ci+1ai=0

上面这个等式,表示的是结点i,一次考虑每个变量来建边。
考虑q:i-1向i连边,费用0,容量无穷。
考虑p:对于每个题目给出的ri,li,dili1ri连边,费用di,容量无穷。
考虑常数c:i向t连边,费用0,容量ci并且设定流量下界ci;s向i连边,费用0,容量ci+1并且设定流量下界ci+1
考虑a:i向t连边,费用0,容量无穷。

显然答案会在最大流时取到。
于是就可以用带上下界的 最大费用最大流求解了!

但是建图可以更优。
对于对偶后得到的约束条件,如果把他们左边右边全部叠加起来,会得到00。这说明为了满足约束条件,所有“”必须取等号。即,在松弛形式中的a,始终等于0。所以关于a的边是没有必要的。

对于常数c,对应的边都是连向s和t的。s的所有出边的容量和为ci,t的所有入边也是ci,只要该问题有解(肯定有解),最大流时就一定满足下界的限制。所以下界可以去掉。
于是就可以用最大费用最大流求解啦!

1 0