引子
曾经很多次看过最大流的模板,基础概念什么的也看了很多遍。也曾经用过强者同学的板子,然而却一直不会网络流。虽然曾经尝试过写,然而即使最简单的一种算法也没有写成功过,然后对着强者大神的代码一点一点的照猫画虎,A了一题。然而这并没有什么用,实际上我还是不会呀。过一阵子就写不出来了,所以那个时候的A应该就是对照着换了换变量吧。持续性萎靡不振,间歇性踌躇满志的我觉得是时候不看资料尤其是不看他人代码完全的自己写一道模板题了。
题目
hihocoder 1369 http://hihocoder.com/problemset/problem/1369
hdu 3549 http://acm.hdu.edu.cn/showproblem.php?pid=3549
两道数据范围极小的模板练习题
最大流问题
不想过多的重复网上已有的基础概念。只想叙述一下我的理解。
把边都想象成仅可以单向流动的水管(虽然这有点奇怪,或者换成单向车道没那么奇怪)。问题就是求从源点到汇点最多流多少水。
流量网络就是每条边流多少水构成的图。
显然通过每条边的限制不能超过该边的容量限制。
残余网络就是每条边还可以流多少水。
最为重要的是反向边的理解了。
当我选择对于在边 (u,v) ( u , v ) 增加其一个流量 f f ,那么u到v的新的残余容量就是这个操作之前残余流量减去
,即
c′(u,v)=c(u,v)−f c ′ ( u , v ) = c ( u , v ) − f
同时增加对v到u的残余流量(如果一开始v到u没有边就是容量为0)增加f.
这个容量的增加如何理解呢?
如果选择给v到u一个 f′ f ′ 的流量,相当于原本变化前的图中u到v的