网络流

https://www.cnblogs.com/victorique/p/8560656.html

https://www.luogu.com.cn/blog/command-block/wang-lao-liu-xiang-guan-bi-ji

最小割建模

黑白染色,然后就变成了套路题。

首先将原图黑白染色,记黑色点数量为 \(b\),点权和为 \(B\) ,白色点数量为 \(w\),点权和为 \(W\),最终所有的数都变为 \(x\)

那么需要的操作数为 \(b * x - B = w * x - W\),移项得到 \(x = \dfrac {B - W} {b - w}\)

\(b \neq w\)\(x\) 可以直接计算出来;

\(b = w\),那么 \(n,m\) 必有至少一个为偶数,这种情况下,显然 \(x\) 会有单调性(考虑 \(x+1\) 时在原方案下两两匹配),二分这个 \(x\) 即可。

闭合子图建模

板子题,每个编号的宝石向它的倍数编号连边,边数 \(O(n \ln n)\),然后就变成了求最大权闭合子图。

具体做法是源点向正权点连流量为点权的边,原图的边流量设为 inf,负权点向汇点连容量为 |点权| 的边,答案即为正权点点权和减去最小 \(S-T\) 割。

板子题,同上。

匹配问题

将限制按 \(u\) 排序,则 \((u_{i-1},u_i]\) 中恰好有 \(t_i - t_{i-1}\) 个数,连边匹配即可。

有上下界的网络流

首先将每条边的初始流量设置为下界,原图的边流量设为上界-下界,这样有些点的流量是不平衡的,需要调整。

考虑新建超级源点 \(s\) 和超级汇点 \(t\),对于每个点:

\(in(i) > out(i)\) ,则连一条 \(s \longrightarrow i\),容量为 \(in(i) - out(i)\) 的边;

\(in(i) < out(i)\) ,则连一条 \(i \longrightarrow t\),容量为 \(out(i) - in(i)\) 的边。

\(s \longrightarrow t\) 的最大流看是否等于 \(s\) 的出边总流量即可判断是否有可行流。

连一条 \(t \longrightarrow s\),容量为 \(inf\) 的边,则变成了无源汇问题。

先跑出可行流,然后加上残量网络上 \(s \longrightarrow t\) 的最大流即可。

和最大流一样,最后减去残量网络上 \(t \longrightarrow s\) 的最大流即可。

有负圈的费用流

  • \(\texttt{P7173 【模板】有负圈的费用流}\)

    考虑先将负权边流满,转化为上下界网络流问题。

    具体地说,将原图的边 \((u,v,cap,c)(c<0)\) 替换成 \((u,v,[cap,cap],c)\)\((v,u,[0,cap],-c)\),然后跑有源汇上下界网络流即可。

posted @ 2021-11-03 07:49  klii  阅读(78)  评论(0)    收藏  举报