isap+bfs初始化+栈优化,点的编号从0开始:

  1. const int MAXN = ;
  2. const int MAXM = ;
  3. const int INF = 0x3f3f3f3f;
  4. struct Edge
  5. {
  6. int to, next, cap, flow;
  7. }edge[MAXM];
  8. int tol;
  9. int head[MAXN];
  10. int gap[MAXN], dep[MAXN], cur[MAXN];
  11. void init()
  12. {
  13. tol = ;
  14. memset(head, -, sizeof(head));
  15. }
  16. void addedge(int u, int v, int w, int rw = )
  17. {
  18. edge[tol].to = v; edge[tol].cap = w; edge[tol].flow = ;
  19. edge[tol].next = head[u]; head[u] = tol++;
  20. edge[tol].to = u; edge[tol].cap = rw; edge[tol].flow = ;
  21. edge[tol].next = head[v]; head[v] = tol++;
  22. }
  23. int Q[MAXN];
  24. void BFS(int start, int end)
  25. {
  26. memset(dep, -, sizeof(dep));
  27. memset(gap, , sizeof(gap));
  28. gap[] = ;
  29. int front = , rear = ;
  30. dep[end] = ;
  31. Q[rear++] = end;
  32. while(front != end) {
  33. int u = Q[front++];
  34. for(int i = head[u]; i != -; i = edge[i].next) {
  35. int v = edge[i].to;
  36. if(dep[v] != -) continue;
  37. Q[rear++] = v;
  38. dep[v] = dep[u] + ;
  39. gap[dep[v]]++;
  40. }
  41. }
  42. }
  43. int S[MAXN];
  44. int sap(int start, int end, int N) { //start是源点编号,end是汇点编号,N是点的总数,返回最大流
  45. BFS(start, end);
  46. memcpy(cur, head, sizeof(head));
  47. int top = ;
  48. int u = start;
  49. int ans = ;
  50. while(dep[start] < N)
  51. {
  52. if(u == end)
  53. {
  54. int Min = INF;
  55. int inser;
  56. for(int i = ; i < top; i++)
  57. if(Min > edge[S[i]].cap - edge[S[i]].flow) {
  58. Min = edge[S[i]].cap - edge[S[i]].flow;
  59. inser = i;
  60. }
  61. for(int i = ; i < top; i++)
  62. {
  63. edge[S[i]].flow += Min;
  64. edge[S[i]^].flow -= Min;
  65. }
  66. ans += Min;
  67. top = inser;
  68. u = edge[S[top]^].to;
  69. continue;
  70. }
  71. bool flag = false;
  72. int v;
  73. for(int i = cur[u]; i != -; i = edge[i].next)
  74. {
  75. v = edge[i].to;
  76. if(edge[i].cap - edge[i].flow && dep[v] + == dep[u])
  77. flag = true;
  78. cur[u] = i;
  79. break;
  80. }
  81. }
  82. if(flag)
  83. {
  84. S[top++] = cur[u];
  85. u = v;
  86. continue;
  87. }
  88. int Min = N;
  89. for(int i = head[u]; i != -; i = edge[i].next)
  90. if(edge[i].cap - edge[i].flow && dep[edge[i].to] < Min)
  91. {
  92. Min = dep[edge[i].to];
  93. cur[u] = i;
  94. }
  95. gap[dep[u]]--;
  96. if(!gap[dep[u]]) return ans;
  97. dep[u] = Min + ;
  98. gap[dep[u]]++;
  99. if(u != start) u = edge[S[--top]^].to;
  100. }
  101. return ans;
  102. }

最大流isap模板的更多相关文章

  1. LOJ 101 最大流(ISAP 模板)

    开long long的最大流 #include<bits/stdc++.h> using namespace std; ;//点数的最大值 ;//边数的最大值 ; struct Edge ...

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

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

  3. [模板] 网络流相关/最大流ISAP/费用流zkw

    最大流/ISAP 话说ISAP是真快...(大多数情况)吊打dinic,而且还好写... 大概思路就是: 在dinic的基础上, 动态修改层数, 如果终点层数 \(>\) 点数, break. ...

  4. HDU 4280:Island Transport(ISAP模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=4280 题意:在最西边的点走到最东边的点最大容量. 思路:ISAP模板题,Dinic过不了. #include & ...

  5. 2018.08.20 loj#115. 无源汇有上下界可行流(模板)

    传送门 又get到一个新技能,好兴奋的说啊. 一道无源汇有上下界可行流的模板题. 其实这东西也不难,就是将下界变形而已. 准确来说,就是对于每个点,我们算出会从它那里强制流入与流出的流量,然后与超级源 ...

  6. POJ-2135-Farm Tour(最大费用最小流)模板

    Farm Tour POJ - 2135 When FJ's friends visit him on the farm, he likes to show them around. His farm ...

  7. 最大流算法 ISAP 模板 和 Dinic模板

    ISAP // UVa11248 Frequency Hopping:使用ISAP算法,加优化 // Rujia Liu struct Edge { int from, to, cap, flow; ...

  8. 洛谷P3376【模板】网络最大流 ISAP

    这篇博客写得非常好呀. 传送门 于是我是DCOI这一届第一个网络流写ISAP的人了,之后不用再被YKK她们嘲笑我用Dinic了!就是这样! 感觉ISAP是会比Dinic快,只分一次层,然后不能增广了再 ...

  9. HDU 3572 Task Schedule(ISAP模板&amp;&amp;最大流问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3572 题意:m台机器.须要做n个任务. 第i个任务.你须要使用机器Pi天,且这个任务要在[Si  , ...

随机推荐

  1. 走进安卓的重灾区----video

    html5的video已经出来很久了.在ios上使用基本上没什么毛病,但是安卓下就是一个重灾区了,各种体验差.这几天搞了安卓的兼容,简直是要吐血.所以特意总结了一些强势的坑点. 先看一下常用的一些属性 ...

  2. vue数据驱动作用域问题

    需求是这样的,如图 点击禁用后,变成启用,但是结果却不让人满意 我们先来看一下错误代码: //conponet控件里的内容 html内容: <div> <button @click. ...

  3. Git:常用功能 - 命令行

    1. 正在某个分支进行开发,突然有个紧急BUG需要切换到其他分支进行修复? git add README.md # 将文件添加到暂存区 git stash save "v1.0.0 in d ...

  4. 【SignalR学习系列】8. SignalR Hubs Api 详解(.Net C# 客户端)

    建立一个 SignalR 连接 var hubConnection = new HubConnection("http://www.contoso.com/"); IHubProx ...

  5. MongoDB入门命令

    查看所有数据库 > show dbs admin (empty) local 0.078GB > admin和管理相关, admin和local数据库不要轻易动 选择库 > use ...

  6. Python网络数据采集2-wikipedia

    Python网络数据采集2-wikipedia 随机链接跳转 获取维基百科的词条超链接,并随机跳转.可能侧边栏和低栏会有其他链接.这不是我们想要的,所以定位到正文.正文在id为bodyContent的 ...

  7. Unicode 与 Unicode Transformation Format(UTF,UTF-8 / UTF-16 / UTF-32)

    ASCII(American Standard Code for Information Interchange):早期它使用7 bits来表示一个字符,总共表示27 = 128个字符:后来扩展到8 ...

  8. Linux Shell 1 - Print from terminal

    Two ways to print info from terminal - echo & printf - Echo a. Exclamation mark is supported in ...

  9. NYOJ--541--最强DE 战斗力(递推)

    最强DE 战斗力 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 春秋战国时期,赵国地大物博,资源非常丰富,人民安居乐业.但许多国家对它虎视眈眈,准备联合起来对赵国发 ...

  10. Unity 粒子系统 特效 移除屏幕外面后再移回来 不会显示问题

    今天遇到的问题 勾选Particle System组件中的Sub Emitters属性 如图