//网络流SAP模板,复杂度O(N^2*M)
//使用前调用init(源点,汇点,图中点的个数),然后调用add_edge()加边
//调用getflow得出最大流
#define N 55
#define M 500500
#define INF 0x3fffff struct Max_Flow
{
struct node
{
int to,w,next;
}edge[M]; int s,t;
int nn;
int cnt,pre[N];
int lv[N],gap[N]; void init(int ss,int tt,int num)
{
s=ss;
t=tt;
nn = num;//
cnt=;
memset(pre,-,sizeof(pre));
}
void add_edge(int u,int v,int w)//同时建两条边
{
edge[cnt].to=v;
edge[cnt].w=w;
edge[cnt].next=pre[u];
pre[u]=cnt++; edge[cnt].to=u;
edge[cnt].w=;
edge[cnt].next=pre[v];
pre[v]=cnt++;
} int sdfs(int k,int w)
{
if(k==t) return w;
int f=;
int mi=nn-;
for(int p=pre[k];p!=-;p=edge[p].next)
{
int v=edge[p].to,tw=edge[p].w;
if(tw!=)
{
if(lv[k]==lv[v]+)
{
int tmp=sdfs(v,min(tw,w-f));
f+=tmp;
edge[p].w-=tmp;
edge[p^].w+=tmp;
if(f==w||lv[s]==nn) break;
}
if(lv[v]<mi) mi=lv[v];
}
}
if(f==)
{
gap[lv[k]]--;
if( gap[ lv[k] ]== )
{
lv[s]=nn;
}
lv[k]=mi+;
gap[lv[k]]++;
}
return f;
} int getflow()
{
int sum=;
memset(lv,,sizeof(lv));
memset(gap,,sizeof(gap));
gap[]=nn;
while(lv[s]<nn)
{
sum+=sdfs(s,INF);
}
return sum;
} };

网络流——SAP模板的更多相关文章

  1. POJ 1273 Drainage Ditches (网络流Dinic模板)

    Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...

  2. hdu 4280 最大流 sap模板

    给你岛的坐标求最西边到最东边的最大流 /* 最大流模板 sap */ #include<stdio.h> #include<string.h> #include<algo ...

  3. SAP模板

    用的是kuangbin的模板:http://www.cnblogs.com/kuangbin/archive/2012/09/29/2707955.html ;//点数的最大值 ;//边数的最大值 c ...

  4. 关于网络流sap算法

    今天终于学习了网络流..之前一直很怕这类问题,个人觉得网络流算是图论里面最难的了.... sap学习下来感觉一般,关于解法都是意识流,细节也是蛮多的.. 我这里先贴一份模版,自已也加了点注释(只是个人 ...

  5. PKU 3281 Dining 网络流 (抄模板)

    题意: 农夫约翰为他的牛准备了F种食物和D种饮料.每头牛都有各自喜欢的食物和饮料,而每种食物或饮料只能分配给一头牛.最多能有多少头牛可以同时得到各自喜欢的食物和饮料? 思路: 用 s -> 食物 ...

  6. 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)

    题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...

  7. 网络流sap算法模版

    递归版sap: #include<cstdio> #include<iostream> #include<cstring> #include<algorith ...

  8. 最大流 Dinic + Sap 模板

    不说别的,直接上模板. Dinic+当前弧优化: struct Edge{ int x,y,c,ne; }e[M*]; int be[N],all; int d[N],q[N]; int stack[ ...

  9. 网络流SAP+gap+弧优化算法

    poj1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 54962   Accept ...

随机推荐

  1. Android架构分析之Android消息处理机制(一)

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本号:4.4.2 在这个系列文章中我们将来分析Android消息处理机制. 本文介绍了一个使用Han ...

  2. Android Exception 17(database or disk is full)

    android.database.sqlite.SQLiteFullException: database or disk is full delete some app,or clear cache

  3. 基于环信的仿QQ即时通讯的简单实现

    代码地址如下:http://www.demodashi.com/demo/11645.html 我的博客地址 之前一直想实现聊天的功能,但是感觉有点困难,今天看了环信的API,就利用下午的时间动手试了 ...

  4. [WebView学习之三]:使用WebView来创建Apps

    上一篇我们学习了([WebView学习之二]:使用Web Apps 支持不同分辨率屏),今天我们来继续学习. (博客地址:http://blog.csdn.net/developer_jiangqq) ...

  5. 各种broker对比

    broker的主要职责是接受发布者发布的所有消息,并将其过滤后分发给不同的消息订阅者.如今有很多的broker,下面就是一张关于各种broker对比的图片: 在使用mosquitto时,如果想使用集群 ...

  6. Python 解码 Unicode 转义字符串 (转)

    其实,这里要讨论的内容是针对 Python2 的,实际上也是 Python2 中让人头疼的编码问题,而 Python3 则好处理得多. 先来看看例子: >>> s = "我 ...

  7. silverlight RadGridView总结三(转载)

    在RadGridView中进行分组以及导出 分组 主要是在前台进行分组的定义: 前台代码: <telerik:RadGridView x:Name="RadGridView1" ...

  8. wget 命令

    wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能和特点:(1)支持断点下传功能:这一点,也是网络蚂蚁和Fl ...

  9. Java多线程——不可变对象

    不可变对象条件 对象需要满足一下三个条件才是不可变对象: 1.对象创建以后其状态就不能修改 2.对象所有域都是final类型 3.对象是正确创建的(对象在创建期间,this引用没有溢出) 简而言之就是 ...

  10. PHP图片识别成文字

    http://apistore.baidu.com/apiworks/servicedetail/146.html 分类: php2011-- : 3576人阅读 评论() 收藏 举报 phpfunc ...