最大流
来源:互联网 发布:win10自带编程软件 编辑:程序博客网 时间:2024/05/16 19:54
#include "iostream"#include "stack"#include "vector"#include "string.h"#define min(x, y) x < y ? x : yusing namespace std;struct Edge{ int to; //终点 int cap; //容量 int rev; //反向边};const int MAX_V = 100;const int MAX_INT = 10000;vector<Edge> G[MAX_V]; //图的邻接表int visit[MAX_V]; //访问标记void addEdge(int from, int to, int cap){ Edge E; E.to = to; E.cap = cap; E.rev = G[to].size(); G[from].push_back(E); Edge rE; rE.to = from; rE.cap = 0; rE.rev = G[from].size() - 1; G[to].push_back(rE);}//寻找增广路int dfs(int v, int t, int f){ if(v == t) return f; visit[v] = 1; for(int i=0; i<G[v].size(); i++) { Edge &E = G[v][i]; if(!visit[E.to] && E.cap > 0) { int d = dfs(E.to, t, min(f, E.cap)); if(d > 0) { E.cap -= d; G[E.to][E.rev].cap += d; return d; } } } return 0;}//寻找从s到t的最大流int max_flow(int s, int t){ int flow = 0; for(;;) { memset(visit, 0, sizeof(visit)); int f = dfs(s, t, MAX_INT); if(f == 0) return flow; flow += f; }}int main(){ addEdge(0, 1, 10); addEdge(0, 2, 2); addEdge(1, 2, 6); addEdge(1, 3, 6); addEdge(2, 4, 5); addEdge(3, 2, 5); addEdge(3, 4, 8); cout << "最大流为:" << max_flow(0, 4) << endl; return 0;}
0 0
- 最大流-最大利益
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- hdu 5655 CA Loves Stick【思维】
- next permutation函数
- 静态库封装
- js笔记(10)之无缝滚动
- 合并有序数组
- 最大流
- 一起talk C栗子吧(第一百三十七回:C语言实例--查看环境变量)
- 《More Effective C++》条款27:如何让类对象只在栈(堆)上分配空间?
- 【翻译自mos文章】 怎么对Microsoft (Office) Word Document 2007 索引化?
- android studio快捷键
- 浅尝微信朋友圈的细节之美
- vim命令集及快捷键
- 使用BusyBox解决adb shell命令无法使用awk等命令的问题
- Bzoj1856:[Scoi2010]字符串:组合数学