网络流入门1——简单模型转化
在现在的信息学竞赛中,一般不会考裸的最大流问题,而是把问题转化为最
大流或最小割模型,这使得题目有了难度。
1. 最大流模型
一个典型的最大流模型就是二分图的最大二分匹配。
二分图 ( , , ) G X Y E ,其中 X 和 Y 是两个不相交的点集,并且对于每对
( , ) u v E , u X 且 v Y 。二分图的最大二分匹配问题就是从 E 中选择一些边,
大流或最小割模型,这使得题目有了难度。
1. 最大流模型
一个典型的最大流模型就是二分图的最大二分匹配。
二分图 ( , , ) G X Y E ,其中 X 和 Y 是两个不相交的点集,并且对于每对
( , ) u v E , u X 且 v Y 。二分图的最大二分匹配问题就是从 E 中选择一些边,
使得每个点最多在选择的边里出现一次,问最多能选多少条边。
一个二分图的例子及其最大匹配(实线表示选中的边,虚线表示未选中的边)
由于每个点只能在选择的边里出现一次,就此我们可以联想到了流的容量限制 f(u,v)<=c(u,v),因此我们控制经过每个点的流量不超过 1 即可保证每个点只被使用一次。这样我们就得到了一个思路:增加源点和汇点,从源点到左边的每个点连边,从右边的每个点到汇点连边,容量都为 1。两边点中间的边保持不变,只是改成有向边,从左边指向右边。
对于每个左边的点,进去的流量最多只有 1;对于每个右边的点,出去的流
量最多只有 1,所以每个点最多在选中的边里最多出现一次(选中的边即为中间
流量为 1 的弧)。又因为流最大,所以结果就是原二分图的最大二分匹配。
关于二分图的最大二分匹配还有另外一种算法:匈牙利算法,由于其可以更
简单地实现,所以在竞赛中往往不使用最大流,但这种建模方式值得借鉴。