hdu 3549 Flow problem

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549

题意分析:最大网络流 模板题

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include<iostream>

#include<queue>

#include<algorithm>



#define INF 0x7fffffff

#define N 100



using namespace std;



int map[N][N],v[N];

int pre[N];

int n,m;



int BFS(int s,int t)

{

    queue<int>q;

    memset(pre,-1,sizeof(pre));

    memset(v,0,sizeof(v));

    pre[s] = s;

    v[s] = 1;

    q.push(s);

    int i;

    while(!q.empty())

    {

        int w = q.front();

        q.pop();

        for(i=1;i<=n;i++)

        {

            if(map[w][i]&&v[i] == 0)

            {

                pre[i] = w;

                v[i] = 1;

                if(i == t)

                {

                    return 1;

                }

                q.push(i);

            }

        }

    }

    return 0;

}



int EK(int s,int t)

{

    int count = 0;

    int i,pp;

    while(BFS(s,t))

    {

        pp = INF;

        for(i=t;i!=s;i = pre[i])

        {

            if(pp>=map[pre[i]][i])

            {

                pp = map[pre[i]][i];

            }

        }

        for(i=t;i!=s;i=pre[i])

        {

            map[pre[i]][i] -= pp;

            map[i][pre[i]] += pp;

        }

        count += pp;

    }

    return count;

}



int main()

{

    int T,t=0,i,j;

    scanf("%d",&T);

    while(T--)

    {

        t++;

        int x,y,z;

        scanf("%d%d",&n,&m);

        memset(map,0,sizeof(map));

        while(m--)

        {

            scanf("%d%d%d",&x,&y,&z);

            map[x][y] += z;

        }

        printf("Case %d: %d\n",t,EK(1,n));

    }

    return 0;

}

 

你可能感兴趣的:(HDU)