zoukankan      html  css  js  c++  java
  • POJ_1273 Drainage Ditches (网络流)

      /*很裸的网络流题目,看了两天算导,今天终于A了一道网络流的题目。我的第一道网络流啊。。。^ ^

    My Code:
    */

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>

    using namespace std;

    const int N = 210;
    const int inf = 0x6fffffff;

    bool vis[N];
    int map[N][N];
    int pre[N];
    int n, m;

    int augment() {
    int v, i, f_min;
    bool flag = false;

    memset(pre, 0, sizeof(pre));
    memset(vis, false, sizeof(vis));

    deque<int> q;
    q.push_back(1);
    pre[1] = 0;
    vis[1] = true;

    while(!q.empty()) {
    v = q.front();
    q.pop_front();
    for(i = 1; i <= m; i++) {
    if(map[v][i] > 0 && !vis[i]) {
    pre[i] = v;
    vis[i] = true;
    if(i == m) {
    flag = true;
    q.clear();
    break;
    }
    else
    q.push_back(i);
    }
    }
    }
    if(!flag) return 0;
    v = m; f_min = inf;

    while(pre[v]) {
    f_min = map[pre[v]][v] < f_min ? map[pre[v]][v] : f_min;
    v = pre[v];
    }

    v = m;
    while(pre[v]) {
    map[pre[v]][v] -= f_min;
    map[v][pre[v]] += f_min;
    v = pre[v];
    }
    return f_min;
    }

    int main() {
    //freopen("data.in", "r", stdin);

    int ans, a, b, c, aug;

    while(~scanf("%d%d", &n, &m)) {
    memset(map, 0, sizeof(map));
    while(n--) {
    scanf("%d%d%d", &a, &b, &c);
    map[a][b] += c;
    }
    ans = 0; aug = augment();
    while(aug) {
    ans += aug;
    aug = augment();
    }
    printf("%d\n", ans);
    }
    return 0;
    }
  • 相关阅读:
    [ USACO 2007 FEB ] Lilypad Pond (Silver)
    [ USACO 2007 FEB ] Lilypad Pond (Gold)
    [ USACO 2007 OPEN ] Dining
    [ BZOJ 2134 ] 单选错位
    「APIO2018新家」
    「WC2018即时战略」
    「学习笔记」杜教筛
    「APIO2018选圆圈」
    「学习笔记」集合幂级数
    「NOIP2018」保卫王国
  • 原文地址:https://www.cnblogs.com/vongang/p/2246280.html
Copyright © 2011-2022 走看看