关于网络流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 看了上面博客 ...
随机推荐
- bzoj 1503 平衡树
我们可以用一颗平衡树维护每个人的工资,因为工资的变化会影响到后面所有的人,所以我们打一个标签,向平衡树里插入的时候减去这个标签的值,这样代表改变了之后的零点,,这样维护这个标签就好了,输出的时候要加上 ...
- 在电脑中配置adb
在环境变量的系统变量path中添加SDK中platform_tools和tools的路径 如果出现version说明配置成功
- appium===使用weditor代替ui automator viewer
weditor 一个元素定位工具,并可实现通过wifi连接移动端进行定位. https://github.com/openatx/uiautomator2 python安装方式: pip instal ...
- linux dpm机制分析(上)【转】
转自:http://blog.csdn.net/lixiaojie1012/article/details/23707681 1 DPM介绍 1.1 Dpm: 设备电源管理, ...
- BZOJ 2460: [BeiJing2011]元素 贪心,线性基
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2460 解法:从大到小排序,依次贪心的添加到当前集合就可以了,需要动态维护线性基.用拟阵证明 ...
- Phoenix批量修改数据
很简单的一个东西,查了挺久的,浪费了很多的时间 直接用Upsert Into Select就可以了 例:把tables表中cloumn2列等于bbb的都改成aaa Upsert Into Table ...
- Web开发中,页面渲染方案
转载自:http://www.jianshu.com/p/d1d29e97f6b8 (在该文章中看到一段感兴趣的文字,转载过来) 在Web开发中,有两种主流的页面渲染方案: 服务器端渲染,通过页面渲染 ...
- 深入理解python多进程编程
1.python多进程编程背景 python中的多进程最大的好处就是充分利用多核cpu的资源,不像python中的多线程,受制于GIL的限制,从而只能进行cpu分配,在python的多进程中,适合于所 ...
- git+jenkins在windows机器上新建一个slave节点【转载】
转至博客:上海-悠悠 前言 我们在跑自动化项目的时候,希望有单独的测试机能跑自动化项目,并且能集成到jenkins上构建任务.如果公司已经有jenkins环境了,那无需重新搭建. 只需在现有的平台基础 ...
- Container With Most Water——双指针
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...