POJ 1273
2013-07-04 00:42
204 查看
最大流基础题。基本的思路是:先找增广路,路上的流量减掉,反流量(名字忘记了)加上,直到找不到增广路。
#include <cstdio> #include <cstring> #include <queue> #include <climits> using std::queue; using std::memset; const int MAX = 400; int flow[MAX][MAX]; int father[MAX]; bool visit[MAX]; int n,m; int ford_fulkerson() { int ans = 0; queue<int> q; while(1) { while(!q.empty()) q.pop(); q.push(1); memset(visit, 0, sizeof(visit)); memset(father, 0, sizeof(father)); while(!q.empty()) { int from = q.front(); q.pop(); if(from == n) break; for(int to = 1 ; to <= n; to++) { if(flow[from][to] && !visit[to]) { father[to] = from; q.push(to); visit[to] = true; } } } if(!visit ) return ans; int minflow = INT_MAX; for(int to = n; to != 1; to = father[to]) { int from = father[to]; if(minflow > flow[from][to]) minflow = flow[from][to]; } for(int to = n; to != 1; to = father[to]) { int from = father[to]; flow[from][to] -= minflow; flow[to][from] += minflow; } ans += minflow; } } int main() { while(scanf("%d%d",&m,&n)!=EOF) { memset(flow, 0, sizeof(flow)); for(int i = 0 ; i < m; i++) { int from, to, val; scanf("%d%d%d",&from, &to, &val); flow[from][to] += val; } printf("%d\n", ford_fulkerson()); } }
相关文章推荐
- POJ 1273 Drainage Ditches
- 最大流 POJ 1273
- poj 1273 网络流简单模板
- poj 1273 & hdu 1532 Drainage Ditches(最大流 )EK,dinic模板
- poj 1273 Drainage Ditches
- Drainage Ditches (poj 1273 && hdu 1532 网络流之Ford-Fulkerson)
- poj 1273 最大流 基础题 (内有最详细的最大流分析,很好入门)
- POJ 1273(ISAP+邻接表)
- poj 1273Drainage Ditches 最大流
- POJ:1273 Drainage Ditches(网络最大流模版题)
- POJ1273 dinic Pascal模板
- poj 1273 Drainage Ditches | hdoj 1532
- [poj] 1273 Drainage Ditches
- poj 1273 Drainage Ditches
- POJ 1273 最大流入门题 Edmonds_Karp算法
- POJ1273——Drainage Ditches//模板还没搞清楚待定
- poj 1273 Drainage Ditches 【图论-网络流-最大流-Ford-Fulkerson】
- poj1273 网络流 Dinic
- POJ 1273 Drainage Ditches 网络流入门2
- POJ 1273 Drainage Ditches 网络流算法 .