HDU 1532 Drainage Ditches 最大流 (Edmonds_Karp)
2013-08-09 17:19
218 查看
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1532
感觉题意不清楚,不知道是不是个人英语水平问题。本来还以为需要维护入度和出度来找源点和汇点呢,看讨论才知道1就是起点,m就是汇点。。好想把代码写的工程化一点。
View Code
感觉题意不清楚,不知道是不是个人英语水平问题。本来还以为需要维护入度和出度来找源点和汇点呢,看讨论才知道1就是起点,m就是汇点。。好想把代码写的工程化一点。
#include <stdio.h> #include <string.h> #include <queue> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; int n, m; int cap[210][210], flow[210][210], res[210], pre[210]; queue<int>que; int Edmonds_Karp() { while(!que.empty()) { que.pop(); } int flow_sum = 0; while(true) { memset(res, 0, sizeof(res)); res[1] = INF; que.push(1); while(!que.empty()) { int u = que.front(); que.pop(); for(int v = 1; v <= m; v++) { if(!res[v] && cap[u][v] > flow[u][v]) { pre[v] = u; que.push(v); res[v] = min(res[u], cap[u][v] - flow[u][v]); } } } if(res[m] == 0)break; for(int u = m; u != 1; u = pre[u]) { flow[pre[u]][u] += res[m]; flow[u][pre[u]] -= res[m]; } flow_sum += res[m]; } return flow_sum; } int main() { int u, v, w; while(scanf("%d %d", &n, &m) != EOF) { memset(cap, 0, sizeof(cap)); memset(flow, 0, sizeof(flow)); for(int i = 0; i < n; i++) { scanf("%d %d %d", &u, &v, &w); cap[u][v] += w; } printf("%d\n", Edmonds_Karp()); } return 0; }
View Code
相关文章推荐
- Edmonds-Karp 最大流 hdu 1532 Drained Ditches
- 网络流,增广路,Edmonds_Karp 以及 Dinic 算法(HDU 1532)
- HDU1532 Drainage Ditches【最大流】【Edmond-Karp】
- hdu 1532 Drainage Ditches(Edmonds-Karp最大流算法)
- HDU 1532 Drainage Ditches——最大流EK算法
- [hdu 1532] Drainage Ditches(最大流dinic)
- hdu 1532 最大流
- hdu - 1532 Drainage Ditches (最大流)
- HDU 1532 Drainage Ditches(最大流)
- 初谈网络流(最大流)..Edmonds_Karp..Dinic
- hdu1532最大流EK与SAP算法
- HDU 1532 Drainage Ditches (最大流)
- HDU1532_Drainage Ditches_最大流模板题
- hdu 1532 最大流
- hdu 1532 Drainage Ditches 最大流 水题
- hdu 1532 Drainage Ditches(最大网络流)
- Hdu 1532 Drainage Ditches - 最大流入门
- 最大流 - Edmonds-Karp 增广路算法
- hdu 1532 Drainage Ditches (最大流)
- hdu1532最大流EK与SAP算法