网络流知识总结
此片略过网络流基础知识及定义,重点讨论用法
最大流(最小割)
众所周知,最大流的主流算法为Dinic,Isap及预流推进,此处不予以介绍
二分图匹配模型的转化
很多看似复杂的网络流问题都可以将其转化成二分图模型.
1.给你一些点,让取一些点,不取一些点,选取的点和不选取的点之间都有代价
那么显然可以理解为将一个图分为两个点集的最小代价,那么也就可以理解成花最小的代价割掉一些边,使两个点集之间没有边能互通
有上下界的网络流
基本建模:对于一条边的上下界限制(如果是点就拆点当边做):
1.新建源点汇点,也就是有两对源汇.(有些题可以不用新开但有些题必须新开,根据题目选择)
2.该点入点连接新汇点,出点连接新源点,容量都为下界,入点连接出点,容量为上下界之差
3.判断满足条件的情况就是上述前两类边都满流(流满下界嘛)
这样很多看似较难的问题都可以用这种方法解决
求割边最小的最小割
1.先按原图跑一遍最大流,再将满流的边流量设为1(能割的),和INF(不能割的),第二次的最大流即是个数
证明:不会
疑问:如果第一遍的网络流得到的满流边们不够优秀怎么办..
2.设边数位E,则每条边权值w=w*(E+1)+1,跑一边最大流Flow,
则MaxFlow=Flow/(E+1),个数=Flow%(E+1)
证明:
上述操作就相当于将边权转换成(E+1)进制数,其十位是原边权,个位是1
那么上述结果就显然了
不足:容易爆longlong啊..
费用流
目前还没怎么应用…