关于网络流sap算法
今天终于学习了网络流。。之前一直很怕这类问题,个人觉得网络流算是图论里面最难的了。。。。
sap学习下来感觉一般,关于解法都是意识流,细节也是蛮多的。。
我这里先贴一份模版,自已也加了点注释(只是个人的见解。。)
int isap(int x,int s)//s表示当前最多可以流多少
{
if(x==n) return s;//到终点是直接返回答案
int flow=0,Min=n-1,i;//min最大为n-1
for(i=head[x];i!=-1;i=Next[i])
{
int y=to[i];
if(v[i]>0)
{
if(dis[x]==dis[y]+1)//合法
{
int tmp=isap(y,min(s-flow,v[i]));
//flow表示从这个点流出多少
//tmp比表示向y可得的最大流
flow+=tmp;//在当前向y的这个分支可以增加tmp的流量
v[i]-=tmp;
v[i^1]+=tmp;//反向标记,退流
}
Min=min(Min,dis[y]);//用于最后dis数组的更新
//这句话要加在后面,因为dis数组还会更新
}
if(flow==s) return flow;
//优化1--如果当前已经流满了,直接返回答案
if(dis[1]==n) return flow;
//优化2--如果整张图已经不存在增广路,直接退出
}
if(flow==0)//如果找不到路径,则需更改dis数组
{
gap[dis[x]]--;//gap由于计数
if(gap[dis[x]]==0) dis[1]=n;//出现断层,整张图将不存在增广路
dis[x]=Min+1;//dis数组为儿子编号最小值+1
gap[dis[x]]++;
}
return flow;
}
isap函数是寻找一次增广路,具体要找到不存在增广路为止。
while(dis[1]<n)//如果存在增广路,则一直做下去
ans+=isap(1,1e9);
关于网络流sap算法的更多相关文章
- 网络流sap算法模版
递归版sap: #include<cstdio> #include<iostream> #include<cstring> #include<algorith ...
- 网络流Sap算法
GDKOi就快要开始了.没时间打解析,直接上模板. #include <cstdio> #include <cstring> #include <algorithm> ...
- ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)
第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...
- POJ 2455 网络流 基础题 二分+网络流 dicnic 以及 sap算法
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8189 Accepted: ...
- 网络流 最大流—最小割 之SAP算法 详解
首先引入几个新名词: 1.距离标号: 所谓距离标号 ,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度). 设点i的标号为level[i],那么如果将满足level[i]=l ...
- 网络流三大算法【邻接矩阵+邻接表】POJ1273
网络流的基本概念跟算法原理我是在以下两篇博客里看懂的,写的非常好. http://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html http://www.cnb ...
- 网络流 ISAP算法
网络流问题: 我自己理解,在流网络中,在不违背容量限制的条件下,解决各种从源点到汇点的问题. ISAP算法概念: 据说不会有卡ISAP时间的题目---时间复杂度O(E^2*V) 首先原理都是基于不断寻 ...
- 网络流——SAP模板
//网络流SAP模板,复杂度O(N^2*M) //使用前调用init(源点,汇点,图中点的个数),然后调用add_edge()加边 //调用getflow得出最大流 #define N 55 #def ...
- hdu3572Task Schedule 最大流,判断满流 优化的SAP算法
PS:多校联赛的题目质量还是挺高的.建图不会啊,看了题解才会的. 参考博客:http://blog.csdn.net/luyuncheng/article/details/7944417 看了上面博客 ...
随机推荐
- 【Mysql优化】索引覆盖
索引覆盖 是指 如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.这种查询速度非常快,称为”索引覆盖”,比平时的查询少一次到磁盘读数据的操作.(索引正好覆盖到查 ...
- socket编程中write、read和send、recv之间的区别~转载
socket编程中write.read和send.recv之间的区别 http://blog.csdn.net/petershina/article/details/7946615 一旦,我们建立 ...
- 深入分析_linux_spinlock_实现机制【转】
转自:http://blog.csdn.net/electrombile/article/details/51289813 在 x86 平台上,spinlock 主要通过处理器的 lock 指令前缀实 ...
- inetdev_init && inetdev_destroy
inetdev_init为传入设备分配和绑定ip控制块,查看其调用关系如下: fs_initcall(inet_init)---->inet_init---->ip_init----> ...
- 阿里云ECS安装Docker
阿里云ESC系统信息,官方说2.6内核运行docker服务可能会不稳定: $ uname -a Linux iZ259dixwg8Z -.el6.x86_64 # SMP Thu Jul :: UTC ...
- linux中断线程化分析【转】
转自:http://blog.csdn.net/qq405180763/article/details/24120895 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在为3.8版本的Li ...
- 如何在本地用vs调试微信接口
这段时间在研究微信,看了网上很多都是把项目发布之后在服务器上调试,可以我想可以直接在vs上面设置断点调试 刚开始才用 http://www.cnblogs.com/hanzhaoxin/p/45186 ...
- ubuntu 10.04打开错误
打开ubuntu时,出现的错误如下: Invalid configuration file. File "E:\Ubuntu12.04.vmwarevm\Ubuntu12.04.vmx&qu ...
- 【Android开发日记】之入门篇(十五)——ViewPager+自定义无限ViewPager
ViewPager 在 Android 控件中,ViewPager 一直算是使用率比较高的控件,包括首页的banner,tab页的切换都能见到ViewPager的身影. viewpager 来源自 v ...
- linux命令(24):find命令
1.命令格式: find pathname -options [-print -exec -ok ...] 2.命令功能: 用于在文件树种查找文件,并作出相应的处理 3.命令参数: pathname: ...