hdu 3549 最大流 水题

来源:互联网 发布:四网合一网站源码 编辑:程序博客网 时间:2024/06/17 00:40

这应该是最简单的最大流问题了,直接套模板。。。。

#include<stdio.h>#include<iostream>#include<map>#include<string.h>#include<queue>#include<vector>#include<math.h>#include<algorithm>#define inf 0x3f3f3f3fusing namespace std;int dis[20];int flow[500][500];int n,m;int bfs(){    memset(dis,-1,sizeof(dis));    queue<int>Q;    dis[1]=1;    Q.push(1);    while(!Q.empty())    {        int top=Q.front();        Q.pop();        for(int i=1;i<=n;i++)        {            if(flow[top][i]>0&&dis[i]<0)            {                dis[i]=dis[top]+1;                Q.push(i);            }        }    }    if(dis[n]>0)return 1;    return 0;}int dinic(int x,int k){    if(x==n)        return k;    int y;    for(int i=1;i<=n;i++)    {        if(flow[x][i]>0&&dis[i]==dis[x]+1&&(y=dinic(i,min(k,flow[x][i]))))        {            flow[x][i]-=y;            flow[i][x]+=y;            return y;        }    }    return 0;}int main(){    int t;    scanf("%d",&t);    int cas=1;    while(t--)    {        memset(flow,0,sizeof(flow));        scanf("%d%d",&n,&m);        int a,b,c;        for(int i=0;i<m;i++)        {            scanf("%d%d%d",&a,&b,&c);            flow[a][b]+=c;        }        int ans=0;        while(bfs())        {            //cout<<"++"<<endl;            int res;            while(res=dinic(1,inf))ans+=res;        }        printf("Case %d: %d\n",cas++,ans);    }}


原创粉丝点击