最大流DFS(EK)算法模板
来源:互联网 发布:ubuntu 安装lnmp 编辑:程序博客网 时间:2024/05/29 11:42
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#define maxn 1000#define inf 0x3f3f3f3fusing namespace std;struct edge//数据结构{ int en,flow,rev;};vector <edge> v[maxn];int vis[maxn];void addedge(int st,int en,int flow)//加边{ edge save; save.en=en;save.flow=flow;save.rev=v[en].size(); v[st].push_back(save); save.en=st;save.flow=0;save.rev=v[st].size()-1; v[en].push_back(save); return;}int dfs(int st,int en,int flow){ if (st==en) return flow; vis[st]=1; for (int k=0;k<v[st].size();k++) { edge &save=v[st][k]; if ((!vis[save.en])&&(save.flow>0)) { int d=dfs(save.en,en,min(flow,save.flow)); if (d>0) { save.flow-=d; v[save.en][save.rev].flow+=d; return min(flow,d); } } } return 0;}int max_flow(int st,int en)//求最大流{ int sum(0); while(1) { memset(vis,0,sizeof(vis)); int flow(0); flow=dfs(st,en,inf); if (flow<=0) break; else sum+=flow; } return sum;}int main(){ int n,t,m,Case; Case=0; scanf("%d",&t); while(t--) { scanf("%d %d",&m,&n); for (int k=1;k<=n;k++) v[k].clear(); for (int k=1;k<=n;k++) { int st,en,flow; scanf("%d %d %d",&st,&en,&flow); addedge(st,en,flow); } Case++; printf("Case %d: %d\n",Case,max_flow(1,m)); } return 0;}
阅读全文
0 0
- 最大流DFS(EK)算法模板
- 最大流EK算法模板
- 最大流EK算法模板
- 最大流之EK算法模板(小白皮)
- HDU_1532 && HDU_3549(最大流EK算法模板)
- 最大流问题(EK算法模板)
- HDU1532(最大流EK算法模板题)
- HDOJ1532 最大流 BFS + EK 算法 模板
- 最大流EK算法
- 最大流EK算法
- 最大流-EK算法
- 最大流-EK算法
- 网络流之最大流算法模板EK
- poj 1273 Drainage Ditches(最大流的EK算法模板)
- hdu 3549 Flow Problem(最大流EK算法模板)
- HDU 3549 Flow Problem【最大流模板题,EK算法】
- 【模板】EK求最大流
- EK算法(网络流,最大流)
- Maven快速入门
- emWin 2天速成实例教程005_控件聚焦和用户消息的使用方法
- 初识Android图片加载之Glide
- Luogu P2679 [NOIp提高组2015]子串
- jquery_01
- 最大流DFS(EK)算法模板
- 数据结构上机实验之二分查找之平衡二叉树
- 优先队列
- Pandas知识点(五)
- linux安装jdk以及eclipse,安装Anaconda与pyChram
- 51Nod-1711平均数(二分+树状数组|线段树)
- 算法竞赛入门——6174问题
- [NOIP2016]魔法阵 T4
- mysql 添加中文数据出现乱码的解决方法