HDU 1532 Drainage Ditches——最大流EK算法

来源:互联网 发布:w7内外网转换软件 编辑:程序博客网 时间:2024/05/29 15:59

模板题

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 1000 + 10;struct Node {    int to;    int cap;    int rev;};vector<Node> v[maxn];bool used[maxn];void add_node(int from, int to, int cap) {    v[from].push_back((Node){to, cap, v[to].size()});    v[to].push_back((Node){from, 0, v[from].size() - 1});}int dfs(int s, int t, int f) {    if (s == t) return f;    used[s] = true;    for (int i = 0; i < v[s].size(); i++) {        Node &temp = v[s][i];        if (used[temp.to] == false && temp.cap > 0) {            int d = dfs(temp.to, t, min(f, temp.cap));            if (d > 0) {                temp.cap -= d;                v[temp.to][temp.rev].cap += d;                return d;            }        }    }    return 0;}int max_flow(int s, int t) {    int flow = 0;    while (true) {        memset(used, false, sizeof(used));        int f = dfs(s, t, INF);        if (f == 0) return flow;        flow += f;    }}int main(){    int n, m;    while (scanf("%d %d", &n, &m) == 2) {        memset(v, 0, sizeof(v));        for (int i = 0; i < n; i++) {            int x, y, z;            scanf("%d %d %d", &x, &y, &z);            add_node(x, y, z);        }        printf("%d\n", max_flow(1, m));    }    return 0;}


阅读全文
0 0
原创粉丝点击