hdu 3549 Flow Problem (最大流)
2015-08-05 15:43
399 查看
裸最大流,做模板用
m条边,n个点,求最大流
m条边,n个点,求最大流
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std; const int N = 20; const int INF = 0x7fffffff; int flow ; int cap ; int pre ; queue<int>q; int m, n; int BFS(int src, int des) { while (!q.empty()) q.pop(); for (int i = 1; i <= n; ++i) pre[i] = -1; flow[src] = INF; pre[src] = 0; q.push(src); while (!q.empty()) { int index = q.front(); q.pop(); if (index == des) break; for (int i = 1; i <= n; ++i) { if (pre[i] == -1 && cap[index][i] > 0) { pre[i] = index; flow[i] = min(cap[index][i], flow[index]); q.push(i); } } } if (pre[des] == -1) return -1; return flow[des]; } int maxFlow(int src, int des) { int ans = 0; int in = 0; while ((in = BFS(src, des)) != -1) { int k = des; while (k != src) { int last = pre[k]; cap[last][k] -= in; cap[k][last] += in; k = last; } ans += in; } return ans; } int main() { int t; int i, k; scanf("%d", &t); for (k = 1; k <= t; ++k) { memset(cap, 0, sizeof cap); memset(flow, 0, sizeof flow); scanf("%d%d", &n, &m); for (i = 0; i < m; ++i) { int a, b, c; scanf("%d%d%d", &a, &b, &c); cap[a][b] += c; } printf("Case %d: %d\n", k, maxFlow(1, n)); } return 0; }
相关文章推荐
- softmax回归,你会求导吗?
- UTF-8 GBK UTF8 GB2312 之间的区别和关系
- JSON处理
- python的logging模块,记录所发生的异常。
- sort命令
- 【漏洞分析】Heartbleed 2014-0160漏洞Poc及规则分析
- SDN控制器-Ryu简单使用
- UVA375等腰三角行无限内切圆面积
- UltraEdit编辑器如何设置缩进,如何进行多行缩进
- css之自己对hack的理解
- POJ 3292 Semi-prime H-numbers(筛选)
- CSU 1032 OSU! Scoring System
- 属性动画(下):我也来山寨一个卫星菜单
- css3 - 旋转的木马
- [ios]MKMapView中使用MKPolyline画线
- java操作pdf
- (C++)数据结构之括号匹配的问题?
- VC DLL的编写调用
- java 单例模式
- Eclipse需要学的快捷键