明天补充~~~先上代码

  1. #include<iostream>
  2. #include<string>
  3. #include<queue>
  4. #include<vector>
  5. #include<stack>
  6. #include<algorithm>
  7. #include<cstdio>
  8. #include<cmath>
  9. #include<cstring>
  10.  
  11. using namespace std;
  12.  
  13. typedef long long ll;
  14. const int inf = 0x3f3f3f3f;
  15. const int maxn =500+10;
  16.  
  17. struct Edge{
  18. int v,cap,next;
  19. }edge[maxn];
  20. int n,m,ne,nv;
  21. int head[maxn],pre[maxn],level[maxn],gap[maxn],cur[maxn];
  22. void addEdge(int u,int v,int cap){
  23. edge[ne].v=v;
  24. edge[ne].cap=cap;
  25. edge[ne].next=head[u];
  26. head[u]=ne++;
  27.  
  28. edge[ne].v=u;
  29. edge[ne].cap=0;
  30. edge[ne].next=head[v];
  31. head[v]=ne++;
  32. }
  33. void bfs(int vt){
  34. memset(level,-1,sizeof(level));
  35. memset(gap,0,sizeof(gap));
  36. level[vt]=0;
  37. gap[level[vt]]++;
  38. queue<int>q;
  39. q.push(vt);
  40. while(!q.empty()){
  41. int u=q.front();
  42. q.pop();
  43. for(int i=head[u];i!=-1;i=edge[i].next){
  44. int v=edge[i].v;
  45. if(level[v]!=-1){
  46. continue;
  47. }
  48. level[v]=level[u]+1;
  49. gap[level[v]]++;
  50. q.push(v);
  51. }
  52. }
  53. }
  54. int SAP(int vs,int vt){
  55. bfs(vt);
  56. memset(pre,-1,sizeof(pre));
  57. memcpy(cur,head,sizeof(head));
  58. pre[vs]=vs;
  59. gap[0]=nv;
  60. int u=vs,max_flow=0,flow=inf;
  61. while(level[vs]<nv){
  62. bool flag=false;
  63. for(int &i=cur[u];i!=-1;i=edge[i].next){
  64. int v=edge[i].v;
  65. if(edge[i].cap&&level[u]==level[v]+1){
  66. flag=true;
  67. pre[v]=u;
  68. u=v;
  69. flow=min(flow,edge[i].cap);
  70. if(v==vt){
  71. max_flow+=flow;
  72. for(u=pre[v];v!=vs;v=u,u=pre[u]){
  73. edge[cur[u]].cap-=flow;
  74. edge[cur[u]^1].cap+=flow;
  75. }
  76. flow=inf;
  77. }
  78. break;
  79. }
  80. }
  81. if(flag){
  82. continue;
  83. }
  84. int ml=nv;
  85. for(int i=head[u];i!=-1;i=edge[i].next){
  86. int v=edge[i].v;
  87. if(edge[i].cap&&level[v]<ml){
  88. ml=level[v];
  89. cur[u]=i;
  90. }
  91. }
  92. if(--gap[level[u]]==0){
  93. break;
  94. }
  95. level[u]=ml+1;
  96. gap[level[u]]++;
  97. u=pre[u];
  98. }
  99. return max_flow;
  100. }
  101. int main(){
  102. while(~scanf("%d%d",&m,&nv)){
  103. memset(head,-1,sizeof(head));
  104. ne=0;
  105. for(int i=1;i<=m;i++){
  106. int u,v,cap;
  107. scanf("%d%d%d",&u,&v,&cap);
  108. addEdge(u,v,cap);
  109. }
  110. printf("%d\n",SAP(1,nv));
  111. }
  112. return 0;
  113. }

  

最大流的SAP算法模板的更多相关文章

  1. HDU1532最大流 Edmonds-Karp,Dinic算法 模板

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...

  2. 最大流的EK算法模板

    模板题:洛谷p3376 题目大意: 给出一个网络图,以及其源点和汇点,求出其网络最大流. 基本思路: 套模板 EK的时间复杂度O(V*E^2) EK算法思路: 1.通过BFS拓展合法节点(每个节点在本 ...

  3. POJ 1459 Power Network(网络最大流,dinic算法模板题)

    题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数.      接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z:np个数据(u)z,表示发电 ...

  4. 最大流之sap算法

    若有向图G = (V , E)满足下列条件: 1.有且仅有一个顶点S,它的入度为 0 ,这个顶点称为源点. 2.有且仅有一个顶点T,它的出度为 0 ,这个顶点称为汇点. 3.每一条弧都有一个非负数,叫 ...

  5. HDU-1532 Drainage Ditches (最大流,EK算法模板)

    题目大意:最大流的模板题...源点是0,汇点是n-1. 代码如下: # include<iostream> # include<cstdio> # include<cma ...

  6. HDU1532 Drainage Ditches —— 最大流(sap算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 Drainage Ditches Time Limit: 2000/1000 MS (Java/ ...

  7. 网络流 最大流—最小割 之SAP算法 详解

    首先引入几个新名词: 1.距离标号: 所谓距离标号 ,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度). 设点i的标号为level[i],那么如果将满足level[i]=l ...

  8. hdu3572Task Schedule 最大流,判断满流 优化的SAP算法

    PS:多校联赛的题目质量还是挺高的.建图不会啊,看了题解才会的. 参考博客:http://blog.csdn.net/luyuncheng/article/details/7944417 看了上面博客 ...

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

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

随机推荐

  1. 爬虫技术:cookies池的维护

    一:为什么要维护cookie 1.登录才能爬取内容 2.爬取频繁会被封号. 3.需要维护多个账号的cookie,实现大规模抓取 二:cookies的要求 1.自动登录更新 2.定期筛选验证 3.提供外 ...

  2. 初识Uniprot API

    Uniprot,全名Universal Protein,其整合了Swissprot.TrEMBL和PRI-PSD三大数据库,是目前使用非常广泛的蛋白质数据库 常规物种的蛋白质组学研究一般会使用Unip ...

  3. kafka-producer.properties

    # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreement ...

  4. 七、单例设计模式共享数据分析、解决、call_once

    一.设计模式大概谈 代码的一些写法,与常规的写法不太一样,程序灵活,维护起来很方便,但是别人接管.阅读代码很痛苦. 用设计模式理念写出来的代码很晦涩.<< head first>&g ...

  5. Java和Tomcat的关系 Java如何发布web服务

    https://blog.csdn.net/qq_31301961/article/details/80732669 除了Tomcat还有WebLogic 大型分布式的 如何部署映射 Tomcat使用 ...

  6. ARC093 F Dark Horse——容斥

    题目:https://atcoder.jp/contests/arc093/tasks/arc093_d #include<cstdio> #include<cstring> ...

  7. php7结合mongoDB插入数据

    php7结合mongoDB插入数据 代码如下: <?php $bulk = new MongoDB\Driver\BulkWrite;//1 $document = ['_id' => n ...

  8. 5 August

    P1016 旅行家的预算 单调队列. 再看看单调队列怎么用的. #include <cstdio> int n, l, r; double D, dd, d[9], C, p[9], an ...

  9. 测开之路四十七:Django之请求静态资源与模板

    框架必要的配置 import sysfrom django.conf.urls import urlfrom django.conf import settingsfrom django.http i ...

  10. Reciting(third)

      It is subtly demonstrate in the portrayal that a teacher is teaching mathmatics in a certain class ...