几个比较好的博客
http://www.renfei.org/blog/isap.html
http://kenby.iteye.com/blog/945454
http://blog.csdn.net/mypsq/article/details/37959249
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define inf 999999
#define N 300
struct node {
int u,v,w,next;
}bian[N*N*2];
int head[N],yong,stac[N],top,start,n,cur[N],dis[N],gap[N];
void init() {
memset(head,-1,sizeof(head));
memset(dis,-1,sizeof(dis));
memset(gap,0,sizeof(gap));
memset(cur,0,sizeof(cur));
top=0;start=1;yong=0;
}
void addedge(int u,int v,int w) {/*建边*/
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
void bfs() {
queue<int>q;
q.push(n);
dis[n]=0;
int i;
/*建立层次图*/
while(!q.empty()) {
int c=q.front();
q.pop();
for(i=head[c];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(dis[v]==-1) {//这里注意不能加这个条件(bian[i^1].w)
dis[v]=dis[c]+1;
q.push(v);
}
}
}
}
int ISAP() {
int k,i,sum=0;
bfs();
for(i=1;i<=n;i++)//cur数组记录当前位置的边的坐标
cur[i]=head[i];
for(i=1;i<=n;i++)
gap[dis[i]]++;//gap优化记录到汇点距离为dis[i]的个数
k=start;
while(dis[start]<n) {
if(k==n) {//如果满足条件
int mi=inf,index;
for(i=0;i<top;i++)
if(mi>bian[stac[i]].w) {//找最小流
mi=bian[stac[i]].w;
index=i;
}
for(i=0;i<top;i++) {//修改残留网络
bian[stac[i]].w-=mi;
bian[stac[i]^1].w+=mi;
}
sum+=mi;
top=index;//定位到最小的边的权值的位置
k=bian[stac[top]].u;//当前的k
}
for(i=cur[k];i!=-1;i=bian[i].next) {//遍历未走过的边
int v=bian[i].v;
if(bian[i].w&&dis[k]==dis[v]+1) {//
cur[k]=i;
k=v;
stac[top++]=i;
break;
}
}
if(i==-1) {/*更新*/
int m=n;
for(i=head[k];i!=-1;i=bian[i].next)
if(bian[i].w&&m>dis[bian[i].v]){
m=dis[bian[i].v];
cur[k]=i;//记录当前的边的下标
}
if(--gap[dis[k]]==0)break;//出现断层
dis[k]=m+1;gap[dis[k]]++;
if(k!=start)//如果非源点的话
k=bian[stac[--top]].u;//退点,推到上一个点,将当前边删掉,因为是<top
}
}
return sum;
}
int main() {
int m,i,j,k;
while(scanf("%d%d",&m,&n)!=EOF) {
init();
while(m--) {
scanf("%d%d%d",&i,&j,&k);
addedge(i,j,k);
addedge(j,i,0);
}
printf("%d\n",ISAP());
}
return 0;
}

isap算法模板poj 1273gap+弧优化 最大流的更多相关文章

  1. poj 3469 最小割模板sap+gap+弧优化

    /*以核心1为源点,以核心2为汇点建图,跑一遍最大流*/ #include<stdio.h> #include<string.h> #include<queue> ...

  2. 网络流小记(EK&dinic&当前弧优化&费用流)

    欢 迎 来 到 网 络 瘤 的 世 界 什么是网络流? 现在我们有一座水库,周围有n个村庄,每个村庄都需要水,所以会修水管(每个水管都有一定的容量,流过的水量不能超过容量).最终水一定会流向唯一一个废 ...

  3. ARC085E(最小割规划【最大流】,Dinic当前弧优化)

    #include<bits/stdc++.h>using namespace std;typedef long long ll;const ll inf=0x3f3f3f3f;int cn ...

  4. P3376 【模板】网络最大流( Edmonds-krap、Dinic、ISAP 算法)

    P3376 [模板]网络最大流( Edmonds-krap.Dinic.ISAP 算法) 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S ...

  5. POJ 1273 Drainage Ditches(网络流dinic算法模板)

    POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...

  6. 最大流当前弧优化Dinic模板

    最大流模板: 普通最大流 无向图限制:将无向图的边拆成2条方向相反的边 无源汇点有最小流限制的最大流:理解为水管流量形成循环,每根水管有流量限制,并且流入量等于流出量 有源汇点的最小流限制的最大流 顶 ...

  7. 最大流当前弧优化Dinic分层模板

    最大流模板: 普通最大流 无向图限制:将无向图的边拆成2条方向相反的有向边 顶点有流量限制:拆成2个点,连接一条容量为点容量限制的边 无源汇点有最小流限制的最大流:理解为水管流量形成循环 有源汇点的最 ...

  8. POJ 1815 - Friendship - [拆点最大流求最小点割集][暴力枚举求升序割点] - [Dinic算法模板 - 邻接矩阵型]

    妖怪题目,做到现在:2017/8/19 - 1:41…… 不过想想还是值得的,至少邻接矩阵型的Dinic算法模板get√ 题目链接:http://poj.org/problem?id=1815 Tim ...

  9. 【最大流之Dinic算法】POJ1273 【 & 当前弧优化 & 】

    总评一句:Dinic算法的基本思想比较好理解,就是它的当前弧优化的思想,网上的资料也不多,所以对于当前弧的优化,我还是费了很大的功夫的,现在也一知半解,索性就写一篇博客,来发现自己哪里的算法思想还没理 ...

随机推荐

  1. luogu1063 能量项链

    题目大意 有一串项链,项链上的每个珠子有首尾两个数字,首尾相连的两个珠子的尾数字和头数字相同.每次选择相连的一对珠子,得到第一个项链的首数字*第一个项链的尾数字(第二个项链的首数字)*第二个项链的尾数 ...

  2. Codeforces--630D--Hexagons(规律)

     D - Hexagons! Crawling in process... Crawling failed Time Limit:500MS     Memory Limit:65536KB    ...

  3. UESTC--1253--阿里巴巴和n个大盗 (博弈)

     阿里巴巴和n个大盗 Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu Submit St ...

  4. vs code golang代码自动补全

    “go.useCodeSnippetsOnFunctionSuggest”: true 文件-->首选项--->设置--->用户设置 添加下行:然后就可以自动补全了,包括() “go ...

  5. Wall(凸包)

    http://poj.org/problem?id=1113 题意:给出一些点的坐标,和一个半径r,求出这些点围成的凸包的周长再加上一个半径为r的圆的周长. #include <stdio.h& ...

  6. php 原生简版日志导出

    <?phpfunction writeLog($msg){ $logFile = date('Y-m-d').'.txt'; $msg = date('Y-m-d H:i:s').' >& ...

  7. [Apple开发者帐户帮助]二、管理你的团队(4)离开一个团队

    您可以随时离开组织的开发团队.但是,帐户持有人有法律责任,只能在指定另一个团队成员作为帐户持有人后离开团队. 如果您是Apple Developer Program中的团队成员,则可以将团队留在App ...

  8. 06-联系人管理(xib应用)

    ViewController.h文件中: @interface ViewController : UIViewController - (IBAction)add:(UIBarButtonItem * ...

  9. Laravel5.1学习笔记9 系统架构1 请求生命周期 (待修)

    Request Lifecycle Introduction Lifecycle Overview Focus On Service Providers Introduction When using ...

  10. Entity Framework Code First -- 延迟加载和预先加载

    还是以这两个表为例子 country包含零个或多个city, 这个外键关系是我后来加上去,原来没有. 然后再用Power Tool逆向, 产生如下代码 1: using System.Componen ...