图论 最大流FF (Ford-Fulkerson)

来源:互联网 发布:php 商城 需求文档 编辑:程序博客网 时间:2024/06/05 19:15

#include <bits/stdc++.h>using namespace std;typedef int weight_t;const int SIZE_E = //500;const int SIZE_V = //205;int Start,End;struct edge_t{    int node;    weight_t c;    edge_t *next;    edge_t *redge;}Edge[SIZE_E];int Ecnt = 0;edge_t *Ver[SIZE_V] ;void init(){    Ecnt = 0;    memset(Ver,0,sizeof(Ver));}void mkEdge(int a,int b,weight_t c){    int t1 = Ecnt++;    int t2 = Ecnt++;    Edge[t1].node = b;    Edge[t1].c = c;    Edge[t1].next = Ver[a];    Edge[t1].redge = Edge + t2;    Ver[a] = Edge + t1;    Edge[t2].node = a;    Edge[t2].c = 0;    Edge[t2].next = Ver[b];    Edge[t2].redge = Edge + t1;    Ver[b] = Edge + t2;}bool flag[SIZE_V];//int DFS(int u,int f){    if ( u == End) return f;    flag[u] = true;    for (edge_t *p = Ver[u]; p ; p = p->next){        int v = p->node;        if ( flag[v] ) continue;        weight_t c = p->c;        if (c > 0){            int t = DFS(v,min(c,f));            if (t == 0)continue;            p->c -= t;            p->redge->c += t;            return t;        }    }    return 0;}int solve(){    int ret = 0;    while( 1 ){        memset(flag,false,sizeof(flag));        int t = DFS(Start,INT_MAX);        if ( 0 == t )return ret;        ret += t;    }}

--


0 0
原创粉丝点击