【文文殿下】网络流学习笔记
其他
2018-12-14 08:34:42
阅读次数: 0
最大流算法
Dinic
割
一个网络的割:存在一个边集,删去集合里的边时,S-T不再连通
最小割
所有割中边权之和最小的
最小割-最大流定理
最小割等于最大流
二分图匹配
\(M\)为边集\(E\)的一个子集,如果对于任何一个点,都最多被\(M\)中一条边覆盖,则成\(M\)为一个匹配。
最大匹配
使\(|M|\)最大的一个匹配(可能有多个)
最大匹配求法
源点S向所有X连边,Y向T连边,容量均为1,原始图上边容量均为1,最大流=最大匹配。
二分图最小顶点覆盖
\(V'\)是点集\(V\)的一个子集,对于任意一条边,至少有一端在\(V'\)内。
最小的一个\(V'\)被称作最小顶点覆盖
最大匹配=最小顶点覆盖
证明:若有一条边未覆盖,则匹配+1,与最大匹配矛盾
二分图最大独立集
\(V'\)是\(G\)的一个独立集,当且仅当对于任何一条边,它至少有一端不在\(V'\)内
最大独立集大小等于\(|V|-\)最大匹配
证明:最小割。若(S,x)为割边,则在\(V'\)中删去x。y同理。
有向图最小路径覆盖
用尽可能少的简单路径覆盖整张图。特殊的:一个点也是一条简单路径。
二分图建模:把每个点\(x\)拆成\(x_1,x_2\),分别属于X,Y.
对原图一条边,(x,y),链接(\(x_1,y_2\))
易证:最小路径覆盖=\(|V|-\)最大匹配。
X中未被匹配的点是每条路径的起点
二分图点权最大独立集
最大权独立集=\(\sum value(x) -\)最小权顶点覆盖
最小权覆盖=最大匹配=最小割=最大流(原图的边流量为无穷大)
建图:S向所有X连边,容量为value(x),所有的Y向T连边,容量为value(y) ,原图中的边容量为无穷大
最大权闭合子图
\(U\)是\(G\)的一个子图,x属于\(U\) 当且仅当对于任何一条边(x,y),y也属于\(U\),那么\(U\)是\(G\)的一个闭合子图
权值和最大的闭合子图称为最大权闭合子图(权值有正有负)
求法:建立源点S,向所有x(value(x)>0)连边,容量为value(x),建立汇点T,所有y(value(y)<0)向T连边,容量为-value(y),对于原图中的边(x,y),在x,y之间连一条容量为无穷大的边。
最大权闭合子图=\(\sum_{value(x)>0} value(x) -\) 最小割
证明:
若选了一个点x,则他的后继一定会选(最大流),满足闭合子图。
若一个(S,x)为割边,说明(S,x)满流,则选了x,他的后继付出的代价一定不小于x的权值,即x的贡献小于等于0
有节点容量的最大流
建图:对于每一个点x拆成两个点\(x_1,x_2\),对于所有入边,链接\(x_1\)出边从\(x_2\)出,\(x_1,x_2\)之间链接一条容量为节点容量的边
上下界网络流
每条边有流量上界和流量下界
建图:先建新源点S1,新汇点T1,对于一条边(x,y) ,从x到y连一条\(c(e)-l(e)\)的边,从S1向y连一条\(l(e)\)的边,从x向T1连一条\(l(e)\)的边。
建一条从T到S容量为k的边。
存在可行流:从S1出发的所有边都满流。
最小流:二分K,存在可行流,最小的K即为最小流
最大流:先跑可行流。跑完以后,把自己加入的必要弧删去,再恢复源汇,尝试增广S-T
费用流
算法:ZKW费用流
转载自www.cnblogs.com/Syameimaru/p/10117145.html