hdu 1532 最大流水题

来源:互联网 发布:客户还款提醒软件 编辑:程序博客网 时间:2024/06/06 07:00
#include<stdio.h>#include<iostream>#include<algorithm>#include<queue>#include<string.h>#define inf 0x3f3f3f3fusing namespace std;int dis[205];int flow[205][205];int n,m;int bfs(){    memset(dis,-1,sizeof(dis));    dis[1]=1;    queue<int>Q;    Q.push(1);    while(!Q.empty())    {        int top=Q.front();        Q.pop();        for(int i=1;i<=m;i++)        {            if(flow[top][i]>0&&dis[i]<0)            {                dis[i]=dis[top]+1;                Q.push(i);            }        }    }    if(dis[m]>0)return 1;    return 0;}int dfs(int k,int y){    if(k==m)        return y;    int fl;    for(int i=1;i<=m;i++)    {        if(flow[k][i]>0&&dis[i]==dis[k]+1&&(fl=dfs(i,min(flow[k][i],y))))        {            flow[k][i]-=fl;            flow[i][k]+=fl;            return fl;        }    }    return 0;}int main(){    while(~scanf("%d%d",&n,&m))    {        int a,b,c;        memset(flow,0,sizeof(flow));        for(int i=0;i<n;i++)        {            scanf("%d%d%d",&a,&b,&c);            flow[a][b]+=c;        }        int ans=0,res;        while(bfs())        {            //cout<<"++"<<endl;            while((res=dfs(1,inf)))ans+=res;        }        printf("%d\n",ans);    }}

原创粉丝点击