hud 1532 Drainage Ditches + 网络流入门题

来源:互联网 发布:捕蜂器淘宝 编辑:程序博客网 时间:2024/05/18 02:12
#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int M = 300;int mmap[M][M];int pre[M];int vist[M];int n, m;int bfs() {   int v;    memset(vist, 0, sizeof(vist));    memset(pre, 0, sizeof(pre));    queue<int>s;    pre[1] = 0;    vist[1] = 1;     s.push(1);    bool flag = false;    while(!s.empty()) {        v = s.front();        s.pop();        for(int i = 1; i <= m; i++) {            if(mmap[v][i] > 0 && vist[i] == 0) {                pre[i] = v;                vist[i] = 1;                if(i == m) {                    flag = true;                  while(!s.empty()) s.pop();                    break;                }                else                    s.push(i);            }        }    }    if(!flag)        return 0;    v = m;     int minflow = 99999999;     while(pre[v]) {        minflow = min(minflow, mmap[pre[v]][v]);        v = pre[v];     }     v = m;     while(pre[v]) {        mmap[pre[v]][v] -= minflow;        mmap[v][pre[v]] += minflow;        v = pre[v];     }     return minflow;}int main(){ int a, b, c; while(scanf("%d%d", &n, &m) != EOF) {    memset(mmap, 0, sizeof(mmap));    for(int i = 0; i < n; i++) {        scanf("%d%d%d", &a, &b, &c);        mmap[a][b] += c;    }    int ans = 0;    int flow;    while(flow = bfs()) {        ans += flow;    }   printf("%d\n", ans); }    return 0;}

0 0
原创粉丝点击