ISAP求最大流,敲了一发板子,无压行,教程略去。转载请随意。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. ;
  8. const int inf = 0x33333333;
  9.  
  10. struct edge {
  11. int to, rev, cap;
  12. };
  13.  
  14. int n;
  15. vector<edge> G[maxn];
  16.  
  17. void add_edge(int u, int v, int cap) {
  18. G[u].push_back((edge){v, (int)G[v].size(), cap});
  19. G[v].push_back((edge){u, (, });
  20. }
  21.  
  22. int isap(int s, int t) {
  23. //init
  24. static int h[maxn]; //距离标号
  25. static int cnt[maxn]; //距离标号计数
  26. static int cur[maxn]; //当前弧
  27. static int pv[maxn]; //上一个顶点
  28. static int pe[maxn]; //上一条弧
  29. memset(h, , sizeof h);
  30. memset(cnt, , sizeof cnt);
  31. cnt[] = n;
  32. memset(cur, , sizeof cur);
  33. //solve
  34. int u = s;
  35. ;
  36. while(true) {
  37. if(u == t) {
  38. //augment
  39. int newflow = inf;
  40. for(int x = t; x != s; x = pv[x]) {
  41. edge &e = G[pv[x]][pe[x]];
  42. newflow = min(newflow, e.cap);
  43. }
  44. flow += newflow;
  45. for(int x = t; x != s; x = pv[x]) {
  46. edge &e = G[pv[x]][pe[x]];
  47. e.cap -= newflow;
  48. G[x][e.rev].cap += newflow;
  49. }
  50. u = s;
  51. }
  52. bool did = false;
  53. for(int &i = cur[u]; i < (int)G[u].size(); ++i) {
  54. edge &e = G[u][i];
  55. && h[u] == h[e.to] + ) {
  56. //advance
  57. did = true;
  58. pv[e.to] = u;
  59. pe[e.to] = i;
  60. u = e.to;
  61. break;
  62. }
  63. }
  64. if(!did) {
  65. //retreat
  66. ;
  67. ; i < (int)G[u].size(); ++i) {
  68. edge &e = G[u][i];
  69. ) {
  70. newh = min(newh, h[e.to] + );
  71. }
  72. }
  73. ) {
  74. //gap
  75. break;
  76. }
  77. ++cnt[h[u] = newh];
  78. if(u != s) {
  79. u = pv[u];
  80. }
  81. }
  82. }
  83. return flow;
  84. }
  85.  
  86. int main(void) {
  87. int m, source, sink;
  88. scanf("%d%d%d%d", &n, &m, &source, &sink), --source, --sink;
  89. ; i < m; ++i) {
  90. int from, to, cap;
  91. scanf("%d%d%d", &from, &to, &cap), --from, --to;
  92. add_edge(from, to, cap);
  93. }
  94. printf("%d\n", isap(source, sink));
  95. ;
  96. }

[板子]ISAP的更多相关文章

  1. 最大流算法之ISAP

    序: 在之前的博文中,我解释了关于最大流的EK与Dinic算法,以及它们的STL/非STL的实现(其实没什么区别).本次讲解的是ISAP算法.'I',指 inproved,也就是说ISAP其实是SAP ...

  2. 【最大流ISAP】洛谷P3376模板题

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...

  3. poj-1459-最大流dinic+链式前向星-isap+bfs+stack

    title: poj-1459-最大流dinic+链式前向星-isap+bfs+stack date: 2018-11-22 20:57:54 tags: acm 刷题 categories: ACM ...

  4. ISAP 最大流 最小割 模板

    虽然这道题用最小割没有做出来,但是这个板子还是很棒: #include<stdio.h> #include<math.h> #include<string.h> # ...

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

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

  6. HDU 4280 Island Transport(HLPP板子)题解

    题意: 求最大流 思路: \(1e5\)条边,偷了一个超长的\(HLPP\)板子.复杂度\(n^2 \sqrt{m}\).但通常在随机情况下并没有isap快. 板子: template<clas ...

  7. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

  8. [板子]倍增LCA

    倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm ...

  9. UP Board 人若有大胆,板子就很惨:首次上电开机失败

    前言 原创文章,转载引用务必注明链接. 注意:拍照自带抖动功能,画质大家凑合着看.冬日天气干燥,手触摸板子前建议流水洗手或者握持大体积导电体将静电放走. 本文使用Markdown写成,为获得更好的阅读 ...

随机推荐

  1. DataGridView绑定源码下载

    效果图: 源码下载:http://hovertree.com/h/bjaf/bbot18bj.htm 上面源码不包含数据库的查询,需要获取数据库数据的话,请看这个的源码: http://hovertr ...

  2. ASP.NET WebApi 文档Swagger中度优化

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws   写在前面 在后台接口开发中,接口文档是必不可少的.在复杂的业务当中和多人对接的情况下,简 ...

  3. RedisRepository封装—Redis发布订阅以及StackExchange.Redis中的使用

    本文版权归博客园和作者本人吴双共同所有,转载请注明本Redis系列分享地址.http://www.cnblogs.com/tdws/tag/NoSql/ Redis Pub/Sub模式 基本介绍 Re ...

  4. 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法

    1,到官网下载最新的boost,www.boost.org 这里我下载的1-63版本. 2,安装,解压后运行bootstrap.bat文件.稍等一小会就OK. 3,编译boost库.注意一定要使用VS ...

  5. GJM : Unity3D HIAR -【 快速入门 】 六、导出 iOS 工程

    导出 iOS 工程 在开始之前,请务必先保存您的工程.由于 Unity 无法直接生成 ipa 文件,您需要先导出 iOS 工程文件,然后通过 Xcode 编译生成. Step 1. 选择平台 在 Un ...

  6. quartz CronExpression表达式

    一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素.按顺序依次为1.秒(0~59)2.分钟(0~59)3.小时(0~23)4.天(月)(0~31,但是你需要考虑你月的天数)5.月(0~11 ...

  7. windows go安装

    1.安装git 因为golang是通过git来管理远程包的,所以我们首先要安装git,下载地址:http://www.git-scm.com/download/. git安装比较简单,直接下一步即可( ...

  8. 模拟Bootstrap响应式网格系统

    Bootstrap响应式(适应于不同的终端设备).Bootstrap栅格系统是利用百分比把视口等分为12个,然后利用媒体查询,设置float属性使之并列显示 一.媒体查询 媒体查询包含一个可选的媒体类 ...

  9. 《HTML5》 Audio/Video全解

    一.标签解读 <audio> 标签属性 <audio id="media" src="http://www.abc.com/test.mp3" ...

  10. 对.net 程序进行源码混淆

    还是那个一卡通的程序,这几天做了一点更新. 因为里面涉及到对数据库的链接,含IP地址和账户密码,一旦被反编译窃取,则源码泄露不说,也给服务器带来一定的风险! 下载ILSpy程序,对自己开发的.net程 ...