附上学习地址:

https://www.luogu.org/blog/ONE-PIECE/jiu-ji-di-zui-tai-liu-suan-fa-isap-yu-hlpp

ISAP过不掉的题:

https://loj.ac/problem/127

const int maxn = 1e4 + 3000;
const int maxm = 4e5 + 10;
const int inf = 1 << 30;
int s, t;
int n, m;
int maxflow;
int cnt, head[maxn], curedge[maxn];
int depth[maxn], gap[maxn];
//depth[i]表示节点i的深度,gap[i]表示深度为i的点的数量
struct Node {int v;int c;int nex;
} edge[maxm];
void init(){cnt = 0;memset(head, -1, sizeof(head));
}
inline void addedge(int u, int v, int c) {//正向建边edge[cnt] = { v, c, head[u] };head[u] = cnt++;//反向建边edge[cnt] = { u, 0, head[v] };head[v] = cnt++;
}
void bfs() {    //从t到s进行分层 memset(depth, -1, sizeof(depth));memset(gap, 0, sizeof(gap));depth[t] = 0;gap[0] = 1;queue<int> que;que.push(t);while (!que.empty()) {int u = que.front();que.pop();//遍历u 的所有出边 for (int i = head[u]; i != -1; i = edge[i].nex) {int v = edge[i].v;if (depth[v] != -1) //已经被分过层 continue;que.push(v);depth[v] = depth[u] + 1;    // v是u 的下一层 gap[depth[v]]++;  //深度为depth[v]的点的数量+1 }}return;
}
int dfs(int u, int flow) {if (u == t) {   // 可以到达t maxflow += flow;return flow;}int used = 0;  //用来表示这个点的流量用了多少for (int &i = curedge[u]; i != -1; i = edge[i].nex) {int v = edge[i].v;if (edge[i].c && depth[v] + 1 == depth[u]) {int mi = dfs(v, min(edge[i].c, flow - used));    // 找出增广路上最少的流量 if (mi) {    // 找到增广路 edge[i].c -= mi;  //正向边- edge[i ^ 1].c += mi;   //反向边+ used += mi;   //当前点流量+ }if (used == flow)  //u的能流出的流量流完 return used;}}//前半段和Dinic一模一样//如果已经到了这里,说明该点出去的所有点都已经流过了//并且从前面点传过来的流量还有剩余//则此时,要对该点更改dep//使得该点与该点出去的点分隔开curedge[u] = head[u];  //当前狐优化退回到最初    --gap[depth[u]];    //深度为depth[u] /*这里要解释一下为什么要统计每个深度的点数:为了优化!?统计每个深度对应点数只为了这句话:if (gap[depth[u]] == 0)   //出现断层,无法到达t了 depth[s] = n + 1;因为我们是按照深度来往前走的,路径上的点的深度一定是连续的,而t的深度为0,如果某个深度的点不存在,那么我们就无法到达t了*/if (gap[depth[u]] == 0)    //出现断层,无法到达t了 depth[s] = n + 1;depth[u]++;   // 层数++ gap[depth[u]]++;    //层数对应个数++ return used;
}
int ISAP() {maxflow = 0;bfs();for (int i = 0; i <= n; ++i) curedge[i] = head[i];while (depth[s] < n) {dfs(s, inf);}return maxflow;
}

ISAP模板(网络流模板)相关推荐

  1. 【网络流】最大流问题(EK算法带模板,Dinic算法带模板及弧优化,ISAP算法带模板及弧优化)上下界网络流

    本blog重点是代码 网络流的相关概念 流网络(flow network) 流(flow) 网络的流 残留网络(residual network) 增广路径(augmenting path) Edmo ...

  2. C++知识点59——类模板(4、类模板的模板参数是一个类模板)

    接上一篇文章https://blog.csdn.net/Master_Cui/article/details/111824152 七.类模板的模板参数是一个模板类 类模板的模板参数本身可以是一个类模板 ...

  3. 记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(二)

    本文接着上一篇记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配 打开HALCON并打开匹配助手 匹配助手如图 "创建"页说明: 1,选择匹配方式 中间偏上方的下拉 ...

  4. Xamarin XAML语言教程控件模板的模板绑定

    Xamarin XAML语言教程控件模板的模板绑定 控件模板的模板绑定 为了可以轻松更改控件模板中控件上的属性值,可以在控件模板中实现模板绑定功能.模板绑定允许控件模板中的控件将数据绑定到公共属性上. ...

  5. 【C++ 语言】面向对象 ( 模板编程 | 函数模板 | 类模板 )

    文章目录 函数模板 类模板 代码示例 函数模板 1. 模板编程 : 类似于 Java 中的泛型编程 ; ① 函数模板 : 对应着 Java 中的泛型方法 ; ② 类模板 : 对应 Java 中的泛型类 ...

  6. C++模板:模板简述,函数模板详细说明【C++模板】(56)

    模板 模板语义 函数模板 重载泛化 函数模板 语法 模板泛化 特性小结 编译原理 函数模板应用 算法抽象 快速排序算法实现模板化 函数模板默认参数 函数模板的特化 函数模板适用场景 模板 模板语义 模 ...

  7. 问模板函数、函数模板,模板类、类模板的区别的问题?

    问模板函数.函数模板,模板类.类模板的区别的问题? - 赵保龙 - 博客园 问模板函数.函数模板,模板类.类模板的区别的问题? 在C++中有好几个这样的术语,但是我们很多时候用的并不正确,几乎是互相替 ...

  8. easyexcel模板循环模板怎么循环_雅思大作文怎么熟练套模板

    雅思作文尤其是大作文,是我花费精力最多的项目,可是收效并不高.最后只考了7分,明显低于其他项目的战绩.我想和我一样觉得雅思作文老大难的同学应该不是少数. 这里我聊聊我套过的雅思大作文模板,希望对正在备 ...

  9. 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

     1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...

  10. 关于模板函数/模板类编译成DLL

    ]关于模板函数/模板类编译成DLL Posted on 2011-08-16 08:48 单鱼游弋 阅读( 353) 评论( 0) 编辑 收藏 要编译成DLL,就要声明和实现分开. 首先文件组织是这样 ...

最新文章

  1. 约数个数定理约数和定理
  2. ORACLE 服务名简述及配置说明
  3. select函数(一)
  4. 投资基金融资理财服务企业网站源码 织梦dedecms模板
  5. 从贝叶斯公式到垃圾邮件的识别
  6. python 图片 变清晰_python模糊图片过滤的方法
  7. 基于产生式系统的野人渡河问题求解
  8. SSE/AVX/AVX2汇编技巧
  9. ①万字《详解canvas api画图》小白前端入门教程(建议收藏)
  10. 3Dmax如何展UV
  11. 主成分分析与探索性因素分析
  12. 细胞和基因治疗产品法律监管问题及伦理的研究
  13. 节假日查询接口,加班,补班,日期查询,放假,日历
  14. 保洁阿姨看完都会了!15个经典面试问题及回答思路,手慢无
  15. C语言基础题集(课前:一维数组,二维数组)
  16. 笔记软件,离线/本地化 or 云笔记?印象、思源笔记、notion、onenote、有道、Roamedit、专注笔记,我来,幕布、飞书、joplin、Obsidian、Logseq、语雀使用体会
  17. 【PHP小皮】使用教程
  18. 老旧小区为什么要进行安防升级改造
  19. 2021年中国互联网广告市场规模、竞争格局与发展趋势分析,行业发展稳中向好「图」
  20. win10关机后cpu风扇还在转_解决win10关机后风扇继续转方法

热门文章

  1. Rabbitmq死信队列
  2. 红队攻击手特训营“第九期” 1.6号开始开班~
  3. QRCode自定义二维码中间图片
  4. (python代码)gn算法划分karate数据集划分学习笔记
  5. 课程设计心得_关于switch输入字母进入死循环问题
  6. 微信小程序 使用wxml2canvas插件生成图片部分问题记录
  7. 调试经验——使用Toad Quest Script Runner (QSR)工具批量执行SQL语句 (run SQL statements in batch with Toad QSR )
  8. oracle导入导出单个表的办法,oracle导入导出单个表的办法
  9. 从外网访问局域网服务器的六种方法
  10. BLEU算法(例子和公式解释)