POJ 1273 Drainage Ditches(最大流入门题)

来源:互联网 发布:oracle sql列默认值 编辑:程序博客网 时间:2024/05/20 14:24

里面可能有重边 可以把重边全部加在一起就可以了,用的是EK算法.

#include <iostream>#include <cstdio>#include <memory.h>#include <queue>using namespace std;#define INF 0X50505050const int maxn = 205;int g[maxn][maxn], fa[maxn], n, m;bool vis[maxn];bool bfs(){memset(fa, -1, sizeof(fa));queue<int> q;q.push(1);while (q.size()){int t = q.front(); q.pop();if(t == m)return true;for (int i = 1; i <= m; ++i){if(g[t][i] && fa[i] < 0){fa[i] = t;q.push(i);}}}return false;}int Emond_karps(){int ans = 0;while (bfs()){int minF=INF;for (int i = m; i != 1; i = fa[i]){if(g[fa[i]][i] < minF){minF = g[fa[i]][i];}}if(minF == INF) break;for (int i = m; i != 1; i = fa[i]){g[fa[i]][i] -= minF;g[i][fa[i]] += minF;}ans += minF;}return ans;}int main(){while (scanf("%d%d", &n, &m) == 2){memset(g,0,sizeof(g));for (int i = 0;i < n ; ++i){int u, v, w;scanf("%d%d%d", &u, &v, &w);g[u][v] += w;}printf("%d\n", Emond_karps());}return 0;}