网络流总结
Posted bluefly-hrbust
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络流总结相关的知识,希望对你有一定的参考价值。
网络流题型总结
负载平衡问题:
N个环形排列的点,每个点之间的权值数量不相等,现在可以让每个点G 公司有 n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最少搬运量可以使 n个仓库的库存数量相同。搬运货物时,只能在相邻的仓库之间搬运。
题解:
首先为了让每个点收支达到平衡,我们可以先求出所有货物的数量,进而求得每个点货物数量的平均值。
那么对于当前仓库有两种可能:
1当前仓库的数量是比平均值大的,那么我们知道当前仓库是需要流出w[i]-avg数量的。
2当前仓库的数量是比平均值小的,那么我们知道当前仓库是需要流入avg-w[i]数量的
对于情况1,我们让这个点和汇点建立一个边,流量上限是w[i]-avg,费用为0,代表这个边必须流满。
对于情况2,我们让这个点和源点建立一条边,流量上限是avg-w[i],费用为0,代表这个边同样必须流满。
现在考虑单点,由于可以在相邻的点之间传递,我们在相邻点之间,建立一条流量上限为INF
,费用为1的边,代表每向这个点流入一个流量,费用为1。
这样跑一个最小费用最大流,就是本题的答案。
P4015 运输问题:
W 公司有 m 个仓库和 n个零售商店。第 i个仓库有 ai? 个单位的货物;第 j 个零售商店需要 bj个单位的货物。
货物供需平衡,即n个零售店需要的和m个仓库所拥有的货物相同
从第 i 个仓库运送每单位货物到第 j个零售商店的费用为 Ci,j??? 。
试设计一个将仓库中所有货物运送到零售商店的运输方案,使总运输费用最少
答案要求,两行分别输出最小运输费用和最大运输费用。
解决方法:
最小运输费用,其实计算的话,就是一个模版题。
问题在于计算最大运输费用。
我们还是利用类似负数转逆的思想,我们考虑把所有的单位运输费用全部设置成为负数,同样跑最小费用最大流,那么其实就转变成为最大费用最大流。
建图的话,其实也比较好建立
S连接仓库,流量上限为仓库货物量,费用为0
仓库连接商店,流量上限为INF,费用为ci,j
商店连接汇点,流量上限为商店需求货物量,费用为0
P4014 分配问题
有 n件工作要分配给 n 个人做。第 i个人做第 j件工作产生的效益为 ci,j。试设计一个将 n件工作分配给 n个人做的分配方案,使产生的总效益最大。两行分别输出最小总效益和最大总效益。每个人只能做一个工件
解决方法:
和运输问题非常类似,但是这里每个物品只能给一个人做。那么我们可以考虑,从源点到每工作一个限制,保证每个工作只能被做一次,同时每个人只能做一个工作。那么我们就从源点连接物品一个流量为1,费用为0的边,而对于每个人,连接汇点,流量上限为1,费用为0,在每个工件和人之间,连接流量为INF,费用为ci,j的边,跑最小费用最大流以及最大费用最大流。
P3355 骑士共存问题
在一个 n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入对于给定的 n*n 个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑士,使得它们彼此互不攻击。
最大匹配=最小点覆盖
最小路径覆盖=|G|-最大匹配数
最大独立集=点数-最大匹配
证明:
把黑白两种位置看成二分图,黑色肯定不能攻击到黑色,白色也肯定不能攻击到白色。
而一个黑色的点一旦出现,那么周围一些白色的点不能同时存在。
我们考虑给不能同时存在的点连接一条流量为INF,
对于黑色类型的点,每个点由于只能放一个,每个点连接源点,流量为1
对于白色类型的点,每个点连接汇点,流量为1。
我们建立出来的图形,其实就是从s-黑点-白点-t。
我们知道这些点实际上是不能存在的,也就是说这些点所连接的汇点,流量应该为0,即最小割。由最小割=最大流,我们求这个图的最小割,即能保证所有无法同时存在的点,满足条件。
这其实就是二分图的最大独立集问题。
选出最多的点数=原来的点数-最大流
选出最多的点数=原来的点数-最小割
Ans=n*n-m-maxflow
以上是关于网络流总结的主要内容,如果未能解决你的问题,请参考以下文章