详细讲解:http://blog.csdn.net/smartxxyx/article/details/9293665

下面贴上我的第一道最大流的题:

hdu3549

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<stdlib.h>
4 #include<iostream>
5 #include<string.h>
6 #include<math.h>
7 #include<vector>
8 #include<map>
9 #include<queue>
10 struct pp
11 {
12 int x;
13 int cap;
14 int pre;
15 };
16 const int N=1e8;
17 bool used[30];
18 using namespace std;
19 vector<pp>GG[30];
20 void add(int from,int to,int vv)
21 { pp ss;
22 ss.cap=vv;ss.x=to;ss.pre=GG[to].size();
23 GG[from].push_back(ss);
24 ss.cap=0;ss.x=from;ss.pre=GG[from].size()-1;
25 GG[to].push_back(ss);
26 }
27 int dfs(int x,int y,int co)
28 {
29 if(x==y)
30 {
31 return co;
32 }
33 used[x]=true;
34 int i,j;
35 for(i=0;i<GG[x].size();i++)
36 { int cc ;
37 pp &LL=GG[x][i];
38 if(!used[LL.x]&&LL.cap>0)
39 {
40 cc=dfs(LL.x,y,min(co,LL.cap));
41 if(cc>0)
42 {
43 LL.cap-=cc;
44 GG[LL.x][LL.pre].cap+=cc;
45 return cc;
46 }
47 }
48 }
49 return 0;
50 }
51 int max_flow(int x,int t)
52 {
53 int flow=0;
54 while(1)
55 {memset(used,0,sizeof(used));
56 int kk=dfs(x,t,N);
57 if(kk==0)
58 {
59 return flow;
60 }
61 else flow+=kk;
62 }
63
64 }
65 int main(void)
66 {
67 int i,j,k,p,q;
68 scanf("%d",&k);
69
70 for(i=1;i<=k;i++)
71 { for(j=0;j<30;j++)
72 GG[j].clear();
73 scanf("%d %d",&p,&q);
74 int x;int y;int n,m;
75 for(j=0;j<q;j++)
76 {
77 scanf("%d %d %d",&x,&y,&n);
78 add(x,y,n);
79 }
80 int M=max_flow(1,p);
81 printf("Case %d: %d\n",i,M);
82 }
83 return 0;
84 }

DINIC算法

  1 #include<stdio.h>
2 #include<algorithm>
3 #include<stdlib.h>
4 #include<iostream>
5 #include<string.h>
6 #include<math.h>
7 #include<vector>
8 #include<map>
9 #include<queue>
10 using namespace std;
11 struct node
12 {
13 int to;
14 int cap;
15 int rev;
16 };
17 int level[20];
18 int iter[20];
19 vector<node>vec[20];
20 void add_edge(int from,int to,int cap )
21 {
22 vec[from].push_back(node {to,cap,vec[to].size()});
23 vec[to].push_back(node {from,0,vec[from].size()-1});
24 }
25 void BFS(int s);
26 int dfs(int id,int t,int f );
27 int max_flow(int s,int t);
28 const int N=1e9;
29 int main(void)
30 {
31 int i,j,k,p,q;
32 int x,y;
33 scanf("%d",&k);
34 int s;
35 for(s=1; s<=k; s++)
36 {
37 scanf("%d %d",&p,&q);
38 for(i=0;i<20;i++)
39 {
40 vec[i].clear();
41 }
42 for(i=0; i<q; i++)
43 {
44 int z;
45 scanf("%d %d %d",&x,&y,&z);
46 add_edge(x,y,z);
47 }
48 int sum=max_flow(1,p);
49 printf("Case %d: ",s);
50 printf("%d\n",sum);
51 }
52 return 0;
53 }
54 void BFS(int s)
55 {
56 memset(level,-1,sizeof(level));
57 queue<int>que;
58 level[s]=0;
59 que.push(s);
60 while(!que.empty())
61 {
62 int id=que.front();
63 que.pop();
64 for(int i=0; i<vec[id].size(); i++)
65 {
66 node x=vec[id][i];
67 if(level[x.to]<0&&x.cap>0)
68 {
69 level[x.to]=level[id]+1;
70 que.push(x.to);
71 }
72 }
73 }
74 }
75 int dfs(int id,int t,int f )
76 {
77 if(t==id)return f;
78 for(int &i=iter[id]; i<vec[id].size(); i++)
79 {
80 node &vv=vec[id][i];
81 if(level[vv.to]>level[id]&&vv.cap>0)
82 {
83 int d=dfs(vv.to,t,min(f,vv.cap));
84 if(d>0)
85 {
86 vv.cap-=d;
87 vec[vv.to][vv.rev].cap+=d;
88 return d;
89 }
90 }
91 }
92 return 0;
93 }
94 int max_flow(int s,int t)
95 {
96 int flow=0;
97 for(;;)
98 {
99 BFS(s);
100 if(level[t]<0)
101 {
102 return flow;
103 }
104 int f=0;
105 memset(iter,0,sizeof(iter));
106 while( (f=dfs(s,t,N))>0)
107 {
108 if(f==0)break;
109 flow+=f;
110 }
111 }
112 }

最大流问题的Ford-Fulkerson模板的更多相关文章

  1. ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)

    第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...

  2. 图的匹配问题与最大流问题(三)——最大流问题Ford-Fulkerson方法Java实现

    上篇文章主要介绍了Ford-Fulkerson方法的理论基础,本篇给出一种Java的实现. 先借助伪代码熟悉下流程 FORD-FULKERSON(G,t,s) 1 for each edge(u,v) ...

  3. 【题解】luogu P3386 【模板】二分图匹配

    题面:https://www.luogu.org/problemnew/show/P3386 好像没有人发Ford-Fulkerson,我来一发, 这道题和P2756飞行员配对方案问题方法一样,网络流 ...

  4. [Algorithm] Maximum Flow

    Ref MIT: lecture-13-incremental-improvement-max-flow-min-cut/ Ford Fulkerson algorithm for finding m ...

  5. hdu 3549 Flow Problem (网络最大流)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  6. poj 1273 Drainage Ditches(最大流,E-K算法)

    一.Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clove ...

  7. Maximum Bipartite Matching

    算法旨在用尽可能简单的思路解决这个问题.理解算法也应该是一个越看越简单的过程,当你看到算法里的一串概念,或者一大坨代码,第一感觉是复杂,此时最好还是从样例入手.通过一个简单的样例,并编程实现,这个过程 ...

  8. Python小白的数学建模课-19.网络流优化问题

    流在生活中十分常见,例如交通系统中的人流.车流.物流,供水管网中的水流,金融系统中的现金流,网络中的信息流.网络流优化问题是基本的网络优化问题,应用非常广泛. 网络流优化问题最重要的指标是边的成本和容 ...

  9. 图割Graph-Cut的最大流实现

    利用最大流标号法求解最大流,详见代码: Version:未加头尾节点版: 缺点:havn't take nodes' pixels into consideration /************** ...

  10. 《算法》第六章部分程序 part 5

    ▶ 书中第六章部分程序,包括在加上自己补充的代码,网络最大流 Ford - Fulkerson 算法,以及用到的流量边类和剩余流量网络类 ● 网络最大流 Ford - Fulkerson 算法 pac ...

随机推荐

  1. C++你不知道的事

    class A { public: A() { cout<<"A's constructor"<<endl; } virtual ~A() { cout&l ...

  2. 关于learning Spark中文版翻译

      在网上找了很久中文版,感觉都是需要支付一定金币才能下载,索性自己翻译算了.因为对Spark有一定了解,而且书籍前面写道,对Spark了解可以直接从第三章阅读,就直接从第三章开始翻译了,应该没有什么 ...

  3. Scala(八)【面向对象总结】

    面向对象总结 面向对象 1.scala包 1.声明包 1.在文件第一行通过package 包名 2.package 包名{ .... } 第二种方法,包名只能在target目录才能看到 2.导入包 1 ...

  4. RAC中常见的高级用法-过滤

    filter      过滤信号,使用它可以获取满足条件的信号. - (void)filter { //只有当我们文本框内容长度大于5才想要获取文本框的内容 [[_passWord.rac_textS ...

  5. HUD总结

    HUD 指示器/HUD/遮盖/蒙板 半透明的指示器如何实现 指示器的alpha = 1.0; 指示器的背景色是半透明的 1. 创建颜色 直接创建对应的颜色 + (UIColor *)blackColo ...

  6. 【编程思想】【设计模式】【结构模式Structural】组合模式composite

    Python版 https://github.com/faif/python-patterns/blob/master/structural/composite.py #!/usr/bin/env p ...

  7. 关系型数据库和非关系型数据库区别、oracle与mysql的区别

    一.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库.    关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐 ...

  8. lucene索引的增、删、改

    package com.hope.lucene;import org.apache.lucene.document.Document;import org.apache.lucene.document ...

  9. Jedis操作五种不同的类型的数据

    package cn.hope.jedis.utils;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;im ...

  10. 使用Booststrap布局网页页面

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8&qu ...