最大流问题的Ford-Fulkerson模板
2016-02-19 22:48
453 查看
详细讲解:http://blog.csdn.net/smartxxyx/article/details/9293665
下面贴上我的第一道最大流的题:
hdu3549
下面贴上我的第一道最大流的题:
hdu3549
#include<stdio.h> #include<algorithm> #include<stdlib.h> #include<iostream> #include<string.h> #include<math.h> #include<vector> #include<map> #include<queue> struct pp { int x; int cap; int pre; }; const int N=1e8; bool used[30]; using namespace std; vector<pp>GG[30]; void add(int from,int to,int vv) { pp ss; ss.cap=vv;ss.x=to;ss.pre=GG[to].size(); GG[from].push_back(ss); ss.cap=0;ss.x=from;ss.pre=GG[from].size()-1; GG[to].push_back(ss); } int dfs(int x,int y,int co) { if(x==y) { return co; } used[x]=true; int i,j; for(i=0;i<GG[x].size();i++) { int cc ; pp &LL=GG[x][i]; if(!used[LL.x]&&LL.cap>0) { cc=dfs(LL.x,y,min(co,LL.cap)); if(cc>0) { LL.cap-=cc; GG[LL.x][LL.pre].cap+=cc; return cc; } } } return 0; } int max_flow(int x,int t) { int flow=0; while(1) {memset(used,0,sizeof(used)); int kk=dfs(x,t,N); if(kk==0) { return flow; } else flow+=kk; } } int main(void) { int i,j,k,p,q; scanf("%d",&k); for(i=1;i<=k;i++) { for(j=0;j<30;j++) GG[j].clear(); scanf("%d %d",&p,&q); int x;int y;int n,m; for(j=0;j<q;j++) { scanf("%d %d %d",&x,&y,&n); add(x,y,n); } int M=max_flow(1,p); printf("Case %d: %d\n",i,M); } return 0; }
相关文章推荐
- 二叉搜索树基本操作
- 关于研究Java中GlassPane的心得
- Android Studio中的EditText控件使用详解
- 查看google chrome和firefox上的cookie
- 定制化Azure站点Java运行环境(4)
- Hotel(线段树合并)
- centos下面安装php开发环境
- 二叉树基本操作(完整版)
- 正则pattern和matcher
- 机器学习博士
- 最小生成树的两种方法
- poj2774 后缀数组
- Spark应用开发如何设定配置生效
- Unity3d热更新 从AssetBundle说起
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 例题+习题(15/16)
- 矢量化的HTML5拓扑图形组件设计
- IDEA ant连接ftp报错NoClassDefFoundError
- 几种常用加密算法比较
- 程序员必备素质-团队
- 运算符重载之 []