关闭

网络流Dinic算法

标签: 数据结构算法
61人阅读 评论(0) 收藏 举报
分类:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cstdlib>
using namespace std;
int maxn=1e9;
int n,m,s,t,e,cost[1000],head[1000],pnt[1000*1000],next[1000],level[1000];
queue<int>q;
void add(int u,int v,int w)
{
    pnt[e]=v;
    cost[e]=w;
    next[e]=head[u];
    head[u]=e++;
    pnt[e]=u;
    cost[e]=0;
    next[e]=head[v];
    head[v]=e++;
}
int bfs(int s,int t)
{
    memset(level,0,sizeof(level));
    while(!q.empty())
    {
        q.pop();
    }
    level[s]=1;
    q.push(s);
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        for(int i=head[u]; ~i; i=next[i])
        {
            int v=pnt[i];
            if(!level[v]&&cost[i])
            {
                level[v]=level[u]+1;
                q.push(v);
                if(v==t)
                    return level[v];

            }

        }

    }
    return level[t];
}
int dfs(int u,int maxf)
{
    int flow=0;
    if(u==t||maxf==0)
        return maxf;
    for(int i=head[u],f; ~i; i=next[i])
    {
        int v=pnt[i];
        if(level[v]==level[u]+1&&cost[i]&&(f=dfs(v,min(cost[i],maxf))))
        {
            cost[i]-=f;
            cost[i^1]+=f;
            maxf-=f;
            flow+=f;
            if(!maxf)
                break;
        }
    }
    if(!flow)
        level[u]=0;
    return flow;

}
int maxflow(int s,int t)
{
    int flow=0;
    while(bfs(s,t))
    {
        while(1)
        {
            int f=dfs(s,maxn);
            if(f==0)
                break;
            flow+=f;
        }
    }
    return flow;
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        e=0;
        memset(head,-1,sizeof(head));
        while(m--)
        {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            add(u,v,w);
        }
        s=1;
        t=4;
        printf("%d\n",maxflow(s,t));

    }
    return 0;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7810次
    • 积分:839
    • 等级:
    • 排名:千里之外
    • 原创:81篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类