Dinic 网络流

Posted ezoilzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dinic 网络流相关的知识,希望对你有一定的参考价值。

写个博客贴板子……

inline void add_edge(int x,int y,int z){
    e[++tot].x=y,e[tot].cap=z;
    e[tot].next=h[x],h[x]=tot;
    e[++tot].x=x,e[tot].cap=z;
    e[tot].next=h[y],h[y]=tot;
}

bool bfs(){
    queue<int> q;
    memset(deth,-1,sizeof(deth));
    deth[S]=0,q.push(S),cur[S]=h[S];
    while(!q.empty()){
        int x=q.front();q.pop();
        for(int i=h[x];i;i=e[i].next){
            if(!e[i].cap||~deth[e[i].x])continue;
            deth[e[i].x]=deth[x]+1;
            cur[e[i].x]=h[e[i].x];
            q.push(e[i].x);
            if(e[i].x==T)return true;
        }
    }
    return false;
}

int dfs(int x,int flow){
    if(x==T)return flow;
    for(int &i=cur[x];i;i=e[i].next)
        if(e[i].cap&&deth[e[i].x]==deth[x]+1){
            int sum=dfs(e[i].x,min(flow,e[i].cap));
            if(sum>0){
                e[i].cap-=sum,e[i^1].cap+=sum;
                return sum;
            }
        }
    return 0;
}

int dinic(){
    int ans=0,k;
    while(bfs())
    while(k=dfs(S,2e9))ans+=k;
    return ans;
}

以上是关于Dinic 网络流的主要内容,如果未能解决你的问题,请参考以下文章

网络流最大流之Dinic算法

网络流Dinic(本篇介绍最大流)

网络流:最大流之Dinic算法

网络流最大流——dinic算法

网络流的$mathfrak{Dinic}$算法

P3376 网络流-最大流模板题(Dinic+当前弧优化)