该博客整理网络流的常见模型,不建议初学者食用
感谢:本文例题即部分解释来自THU 胡泽聪授课pdf

流量表示变迁

eg1

给定一张的无向图,每条边有长度。点i处有ai头牛,以及一个能容纳bi头
牛的牛棚。牛可以沿边移动,每条边上可以同时有任意头牛经过。一头牛经过
一条边所需时间即为道路长度。
给出一个将牛分配到牛棚的方案,并最小化所需移动时间T。
hint:我们发现这是一个最小值问题,但是不好求,于是我们考率二分答案,显然这是单调的;二分后变成判定性问题;
那么如何解决该判定性问题?网络流!
我们将所有点拆为a与b S连a流量为ai,b连T流量为bi,ab间流量为无穷。当当前的二分值为mid时,我们将满足最短路<=mid的两点i,j之间连边ai>bj bi>aj流量为无穷,当最大流=i=1nai时便成立。不拆点会错,为啥?因为我们的连边原则是dis<=mid 但如果直接连到点j而j与k距离是mid 那i与k距离便>mid 所以会出错。
eg2

有m个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。
依次来了n个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头
猪。
每个顾客分别都有他能够买的数量的上限。
每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开
着的猪圈里,然后所有猪圈重新关上。
问最多总共能卖出多少头猪。
1 ≤ m ≤ 1000、1 ≤ n ≤ 100。
hint:
分开考虑每个猪圈。考虑能对其产生影响的若干顾客。
只有这些顾客才能买,也只有他们才能移动猪圈里的猪。
那么从源向每个猪圈的第一个顾客连边,容量为初始的数量。
每个猪圈的第i个顾客向第i + 1个顾客连边,容量为无穷大。
顾客向T连边 流量为购买能力(正确性交给读者思考)
eg3

有a种食物和b种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享
用一种食物和一种饮料。
现在有n头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表。
问最多能使几头牛同时享用到自己喜欢的食物和饮料。
hint:
有些同学会想到二分图匹配于是这样的图便有了
网络流专题——基本模型与技巧
那么就有一个十分严重的问题 小学问题:两只牛 最大几个匹配?两个。
在上图跑最大流是几个?三个。
这说明牛作为中转站增加了流量,我们需要拆点限流!如下图:
网络流专题——基本模型与技巧
这样就完美解决了问题~

最小割模型

eg1
有一条山谷,长度为W,宽度为L。有n个哨兵,第i个哨兵的视野为以其
位置为圆心半径为ri的圆。
现在需要从山谷的最左侧走到最右侧而不进入任意一个哨兵的视野。问最
少需要提前解决掉多少个哨兵。
hint:emmmm圆形说明可以绕着走?那我们考虑最小割吧!
实际上,有一条路径等价于,山谷没有被“封死”,不会有视野横断了山谷
的宽。
我们对哨兵建两个点,之间连上容量为1的边,用来限流。
设山谷的下边界为源,上边界为汇。
对于两个哨兵,如果他们的视野相交,从左下的兵连向右上的兵,边权为
无穷大。(对吗?)
对于视野碰到了边界的,从源或向汇连边。
实际上,我们应当从哨兵的入点连向出点。
最小割就是答案。
eg2
一张n个点m条边的图,每条边有边权。
现在在点u和点v之间加入一条权值为L的边。我们要使这条边既能出现在
最小生成树上,又能出现在最大生成树上。
问要满足这一条件,至少需要删去多少条边。
hint:理解一下题意 也就是说在边权第1小~第L-1小的时候u和v不连通?诶?不连通——最小割,把L长度之下的边链接,把u和v作为源点汇点跑最小割 最大同理~

最大权闭合子图

首先解释一下这个名词:https://www.cnblogs.com/dilthey/p/7565206.html 感谢dilthey的博客
然后在dilthey dalao细心的讲解下我成功理解了这个名词那么——
通常用来描述有依赖关系的若干物品的选择与否。其本质上是最小割。
假设有n个物品,每个有自己的收益。收益可以为负。
视从S可达的点为选择,可达T的点为不选择。
S →收益为正的物品:收益,收益为负的物品→ T :收益的绝对值。
如果a依赖于b,那么b → a : ∞。
答案为所有收益为正的物品的收益之和减去最小割。

这就是他的作用
eg1
有n个中转站的选址,在第i个地址处建造中转站的代价为pi。
有m个用户,第i个会在第ai和bi个中转站之间通讯,用户愿意支付ci。
求建造方案,使得获利最大。
eg2
有n个项目和m台机器,每个项目依赖于一些机器。
项目有正的收益。机器可以买,也可以租,都有各自的代价。借一次机器
可以给一个项目用一次。
求最大收益。
hint:该题乍一看很裸,BUT:租用,这就很伤 我们对于选择一个工程有两种措施,但是不是必须选两张,那怎么办?我们把租用机器的费用附件到工程->机器的边上!
eg3
有n个点,每个可以是白色或者黑色。可以花vi的代价改变第i个点的颜色。
有m条件,每个条件都是要求某一些点都是某种颜色。如果满足了第i个条
件可以得到gi的收益,没有满足则须付出li的代价。
求最大收益。
没有条件的话,也就是经典模型了。
白点→ T :代价,S →黑点:代价。
我们可以也对条件建点。
如果条件是都是黑色,S →条件:收益+代价。条件→点: ∞。
如果条件是都是白色,条件→ T :收益+代价。点→条件: ∞。
正确性证明同样考虑增广路。
Obviously, It is about min-cut, which can be solved by max-flow. So, this problem can regarded as the minimum of losing money if we assume SmallR can get all the money and get a total money(sum of wi)at first Define that, in the min-cut result, the dogs which are connected directly or indirectly to S are 0-gender.otherwise, those to T are 1-gender.We can easily find that the point of a initial-0-gender dog should get a vi weight edge to S.On the other way, initial-1-gender to T. Then, consider the rich men.As to each of rich men, he can appoint only one gender and some dogs.if any one dog he appoint is not the one appointed gender in the result, he can’t give SmallR money.How to deal with the rich men in the graph is a difficulty.We can do this, make a new point for a rich man.Then, link the man’s point to all points of his dogs by max enough weigh edges(which we can’t cut in the min-cut algorithm), and link the man’s point to S or T (which depend on that the man’s appointed gender is 0 or 1) with a edge of wi weight. lastly run the min-cut(max-flow), we will get the minimum money we will lose. The answer is TotalMoney-LosedMoney. BTW, the issue of g is a piece of cake, we could add it to every special wi but not add it to the total money.
网络流专题——基本模型与技巧
这张图可以很好的帮助证明 当你割s->点的边时 为选择该任务,反之放弃 放弃的条件是li+gi就是该边权

剩下内容考虑到需要费用流姿势 暂时留坑!

UPD:2018 2 27 来填坑啦~

费用递增

这类模型是一类费用流模型,它代表着某个东西可以选择若干次,而次数每加1所需要的代价是递增的。一种常见情况是选择x的代价为x2
eg1
有n支球队,有些球队之间已经打了一些比赛了,现给出每个球队的数据win、lose、C和D,分别表示已胜场数、已负场数,以及计算收益的两个系数。一支球队的收益为Cw2 + Dl2,其中w和l是最后胜负的场数。接下来还有m场比赛。给出接下来m场比赛的对阵情况,求出n支球队收益和的最小值。接下来m场比赛的胜负是你可以决定的。
sol:对于该问题,我们先考虑后m场双方均败,那么我们有最后收益Cw2+D(l+m)2 当然我们可以改变战局对吧 那么我们将每只球队向汇点连x条边,x为其比赛场数,流量为1 花费为

(C(w+1)2+D(l1)2)(Cw2+Dl2)=2wC2lD+C+D

而我们每次连一条边就有w++,l–;我们发现w+l=w+l+m满足条件,正确性证明见图
网络流专题——基本模型与技巧
从图中很明显 s点流出了比赛数的流量,而且比赛必将流向且只流向一个选手,所以最大流必然是m,而且,对于选手到T的花费不同,而费用流会优先少花费,而花费少时对应胜场少,符合手完结论。
eg2
有n辆车和m名修理工,一名修理工在一个时刻只能修一辆车,并且在修
完一辆之后才能开始修下一辆。已知每位修理工修每辆车的时间,求顾客的最
小平均等待时间。顾客的等待时间为他的车被修好的时间。
这题很玄学,我们把每个人i拆点,每个人的第k个点标是倒数第k次修车,那么他假设修了j车,则对答案的贡献是wijk因为还有倒数的k个人等着呢~,这么一来就好了:
对与s点,向车连边,流量1,cost0
对与车,向m个人的分身们连边,流量1,cost wijk
最后每个人的分身向t连边 流量1,cost 0;
我们又很容易证明最大流是n,且费用流会优先选择费用小的边,那么费用小对应着k小,又与事实符合的很好~
eg3
有n个人,两两之间进行一次比赛。有些比赛已经进行了,有些还没有。我们用一个竞赛图来表示输赢情况,一场比赛的有向边从输家连向赢家。你可以决定尚未进行的比赛的输赢情况,使得下面这种三元组的数量最多:(a, b, c)表示一个无序三元组((a, b, c)的任意排列都算同一种),其中存在有向边a → b、b → c、c → a。需要输出方案。n ≤ 100。
???eg1既视感??,不对,好麻烦~
怎么做呢?因为两两都有交手,所以我们依然设最初都输了,然后我们容斥一下:
C3n个三元组,当一个点入度为2时,不成立
则成立数为
C3nC2di

=C3n12(di(di1))

=C3n+12di12di2

然后你发现了啥?di恒定,对于胜败对ans的影响只有di2的贡献,然后这就是eg1了~~

流量平衡

这什么玄学玩意
网络流模型中对于每个点有流量平衡。
每个点流入的流量等于其流出的流量。
利用这个性质来解决一些拥有类似性质的题目
EG
一块n × m的地图,每个格子内有一个箭头。
从某个格子出发,沿着箭头的方向走,从一侧出了边界就从另一侧进入。
如果从任意一个格子出发都能回到出发的格子,那么地图就是合法的。
给定地图,求至少要改变几个格子的箭头的方向,才能使得地图合法。
先考虑判断一个地图是否合法。
把每个格子抽象成节点,向箭头指向的格子连边。
每个格子可以沿箭头回到自己,等价于模型中的每个节点都在一个环中。
而每个节点的出度为1,所以即图中每个连通块都是环。也即每个点的入度为1,出度为1。也就是流量平衡。那么我们建立网络流模型,对每个点拆点成入点和出点。
满流即合法。考虑改变方向,我们可以花费代价搬迁连出去的边。把网络流改成费用流,原有边的费用为0,每个格子的出点向相邻的非箭头所指格子的入点连一条费用为1的边。

END 撒花撒花~

总结一下每个版块:
1.流量表示变迁:
对于变迁类问题,我们可以在数据范围合理的情况下使用网络流。这里常用拆点限流的方法。
2.最小割:
我们对于“可以弯着走能否走通的题目”显然用几何是解决不了的,那么我们就要考虑构建wall 然后跑最小割(最大流啦)
3.最大权闭合子图
这里引用一点吧:
通常用来描述有依赖关系的若干物品的选择与否。其本质上是最小割。
假设有n个物品,每个有自己的收益。收益可以为负。
视从S可达的点为选择,可达T的点为不选择。
S →收益为正的物品:收益,收益为负的物品→ T :收益的绝对值。
如果a依赖于b,那么b → a : ∞。
答案为所有收益为正的物品的收益之和减去最小割。
4.对偶图 见我的另一篇博客
5.费用递增,主要是转换模型,或者拆点的重要性。
6.流量平衡 什么玄学玩意
最后是本篇例题集:(按序排列的)
POJ2391
POJ1149
POJ3281
Escape
BZOJ2561
NOI2006 最大获利
CEOI2008 Order
Codeforces Round #185 (Div. 1) - E
BeiJing2006 (BZOJ1001)
NOI2010 (BZOJ2007)
Codejam Round 2 2014 C
JSOI2009 (BZOJ1449)
SCOI2007 (BZOJ1070)
WC2007 (BZOJ2597)
TCO2013 R1AL3 / BZOJ3171
好困,,链接什么的就不添加了

相关文章:

  • 2021-08-31
  • 2021-10-10
  • 2022-12-23
  • 2021-06-09
  • 2021-04-23
  • 2021-11-25
  • 2021-11-06
  • 2021-11-07
猜你喜欢
  • 2021-08-06
  • 2022-12-23
  • 2022-01-01
  • 2021-08-16
  • 2022-12-23
相关资源
相似解决方案