hdu 3549 Flow Problem(最大流,Edmond Karp)

来源:互联网 发布:用指针求数组平均值 编辑:程序博客网 时间:2024/05/19 05:31

和1532题一样的套路

#include <iostream>#include <queue>#include <cstring>#include <algorithm>#define INF 99999999#define len 1005using namespace std;int r[len][len];int pre[len];bool vis[len];int N,M;bool BFS(int s, int t){    memset(pre,-1,sizeof(pre));    memset(vis,false,sizeof(vis));    queue<int> que;    que.push(s);    pre[s] = s;    vis[s] = true;    int p;    while(!que.empty())    {        p = que.front();        que.pop();        for(int i = 1; i <= M; ++i)        {            if(r[p][i] > 0 && !vis[i])            {                pre[i] = p;                vis[i] = true;                if(i == t)                    return true;                que.push(i);            }        }    }    return false;}int EK(int s, int t){    int maxflow = 0,d;    while(BFS(s,t))    {        d = INF;        for(int i = t; i != s; i = pre[i])            d = min(d,r[pre[i]][i]);        for(int i = t; i != s; i = pre[i])        {            r[pre[i]][i] -= d;            r[i][pre[i]] += d;        }        maxflow += d;    }    return maxflow;}int main(){    int T,time;    cin >> T;    while(T--)    {        time = 1;        while(cin >> M >> N)        {            memset(r,0,sizeof(r));            int s,e,c;            for(int i = 0; i < N; ++i)            {                cin >> s >> e >> c;                r[s][e] += c;            }            cout << "Case " << time << ": " << EK(1,M) << endl;            ++time;        }    }    return 0;}


0 0
原创粉丝点击