线性规划对偶与网络流
线性规划对偶与网络流
1
https://ac.nowcoder.com/acm/contest/81598/K
K - Slay the Spire: Game Design
题目大意
给定一个 \(n\) 个点 \(m\) 条边的有向无环图 \(G = (V, E)\) 以及一个整数 \(k\) ,其中
所有无入度的点为源点,所有无出度的点为汇点。
要求选择最少数量的非源点和汇点的顶点放置精英怪,使得从任何一个
源点出发到任何一个汇点都要经过至少 k个精英怪;或者输出不存在合
法的放置方式。
\(2 ≤ n ≤ 1000\) \(1 ≤ m ≤ 5000\) , \(1 ≤ k ≤ 5\)
拆点后,从选点变为选边,\(f_{x}\) 表示从任意源点出发经过的最小边数,先写出线性规划
模型类似最小割 对偶之后转化为最小费用流(不是最小费用最大流),可以使用最小费用最大流算法,直到增广路长度为非负退出。因为最大流相当于用一个超平面截取一个高维凸包,现在这个平面可以动,则随流量变化答案单峰。
由于每次找增广路答案至少加一 则最多增广 \(n\) 次 复杂度 \(nm\log(n)\)
求出对偶问题解后,用互补松弛定理,使用差分约束得方案
这个解法的优点是 \(k\) 可以很大
2
https://codeforces.com/contest/1662/problem/J
之前部分有点难,但转化后变为找一个有向无环图的最大权反链。这个模型之前没见过。题解有个和下面不同的巧妙构造
那么还是拆点,转线性规划。拆的两点值不同代表选了。
对偶后变为一个有下界无上界的可行流,最小化流量
将原点连上汇点,变为只有这个边有1的费用的最小费用可行流,按照可行流套路,转为最小费用最大流。
进一步,只有一条边有费用的最小费用最大流,可以用连上这条边的最大流,减去没连的最大流。
3
https://codeforces.com/gym/101986 H