码迷,mamicode.com
首页 > 其他好文 > 详细

hdu3549 最大流Dinic

时间:2015-09-21 21:04:38      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<string.h>
#include<queue>
#define MAXN 1010
using namespace std;
int map[MAXN][MAXN],n,dis[MAXN];
int min(int x,int y)
{return x<y?x:y;}
int bfs()
{
    int i,j;
    queue<int>q;
    memset(dis,-1,sizeof(dis));
    dis[1]=0;
    q.push(1);
    while(!q.empty())
    {
        int t=q.front();
        q.pop();
        for(i=1;i<=n;i++)
        {
            if(map[t][i]&&dis[i]<0)
            {
                dis[i]=dis[t]+1;
                q.push(i);
            }
        }
    }
    if(dis[n]>0)
        return 1;
    return 0;
}
int dfs(int u,int low)
{
    int i,j,a;
    if(u==n)
        return low;
    for(i=1;i<=n;i++)
    {
        if(map[u][i]&&dis[i]==dis[u]+1)
        {
            a=dfs(i,min(map[u][i],low));
            if(a<=0)continue;
            map[u][i]-=a;
            map[i][u]+=a;
            return a;
        }
    }
    return 0;
}
int main()
{
    int t,ff=0,i,j,m;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        memset(map,0,sizeof(map));
        for(i=0;i<m;i++)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            map[x][y]+=z;
        }
        int ans=0;
        while(bfs())
        {
            while(1)
            {
                int a=dfs(1,99999999);
                if(!a)break;
                ans+=a;
            }
        }
        printf("Case %d: %d\n",++ff,ans);
    }
}

 

hdu3549 最大流Dinic

标签:

原文地址:http://www.cnblogs.com/sweat123/p/4827089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!