网络流SAP

终于决定开始学习网络流了=.=

<<图论算法理论、实践与应用>>那本书讲了很多关于求最大流的算法,然后我就只挑了一种传说中神奇的SAP算法学习。

首先引入几个新名词:

1、距离标号:

所谓距离标号 ,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度)。

设点i的标号为level[i],那么如果将满足level[i]=level[j]+1的弧(i,j)叫做允许弧 ,且增广时只走允许弧。

2、断层(本算法的Gap优化思想)

gap[i]数组表示距离标号为i的点有多少个,如果到某一点没有符合距离标号的允许弧,那么需要修改距离标号来找到增广路;

如果重标号使得gap数组中原标号数目变为0,则算法结束。

SAP算法框架:

1、初始化;

2、不断沿着可行弧找增广路。可行弧的定义为{( i , j ) , level[i]==level[j]+1};

3、当前节点遍历完以后,为了保证下次再来的时候有路可走,重新标号当前距离,level[i]=min(level[j]+1);

该算法最重要的就是gap常数优化了。

下面对hdu 1532贴上模版:


你可能感兴趣的:(SAP,网络流)