网络流
网络流很好看🛴
上下界网络流
好久之前学的了 没有啥用🚽
思想挺有用的
我们定义一个边的流量需要满足 \(b(u, v) \le f(u, v) \le c(u,v)\)
无源汇上下界可行流
因为有下界, 所以我们直接让所有边的初始流量为 \(b(u, v)\)
这样我们会不满足净流量为 \(0\) 的条件, 所以设 \(M\) 为 流入流量减去流出流量
如果 \(M < 0\) 那么向新建汇点连边
如果 \(M > 0\) 那么向新建源点连边
因为最后我们是要把新建源点汇点删掉的, 所以我们最终的图是流量平衡的
然后对于新的图跑最大流, 如果跑出来不满足, 就说明无解
有源汇上下界可行流
汇点向源点连上界为 inf
的边就可以了
有源汇上下界最大流
我们用上边的操作跑出来一组可行流, 然后我们在残量网络上跑最大流就可以了
残量网络就是把已经流过的流量删去, 不可以退流
有源汇上下界最小流
跑汇点向源点的最大流就可以了
本质?
说的简单一点, 就是只要满足
\(0 \le f(u, v) \le c(u, v)\)
\(\forall x \not = s, x \not= t, \sum f(i, x) - f(x, i) = 0\)
人话就是, 流量满足限制, 且每一个节点都是入流量等于出流量
最小割是分组
常见模型
最小割-最大权闭合子图
先把权值为正的加上, 负的连向汇点, 正的连向源点, 原图上有边就连 inf
然后求最小割
最小割-切糕模型
\(n\) 个变量, 如果 \(x_i = j\) 有 \(w_{i, j}\) 的贡献
\(m\) 个限制, 形如 \(x_v \ge x_u + k\)
我们建一条链 \((u, i) \rightarrow (u , i + 1)\) 流量为权值, 割掉一条边表示选择 \(i\)
对于限制, 连边 \((u, j) \rightarrow (v, j + k)\) 流量为 \(inf\)
只能割一条的限制是 \((u, j) \rightarrow (u, j - 1)\) 流量为 \(inf\)
一面对多面
对于 \([l, r]\) 区间, 我们建一条链, 然后连边 \(l \rightarrow r\) 表示选择这个区间
可以解决无交, 区间减一