zoukankan      html  css  js  c++  java
  • 网络流DINIC模板

    int n,m,k,S,T;
    int head[N],hcnt,lel[N],cur[N];
    struct Node{int to,nxt,v;}node[maxn];
    inline void add(int x,int y,int v){
        node[hcnt].to=y;node[hcnt].nxt=head[x];node[hcnt].v=v;head[x]=hcnt++;
        node[hcnt].to=x;node[hcnt].nxt=head[y];node[hcnt].v=0;head[y]=hcnt++;
    }
    int bfs(){
        mst(lel,-1);lel[S]=0;
        queue<int>q;q.push(S);
        while(!q.empty()){
            int x=q.front();q.pop();
            for(int i=head[x];~i;i=node[i].nxt){
                int e=node[i].to;
                if(lel[e]!=-1||!node[i].v)continue;
                lel[e]=lel[x]+1;
                if(e==T)return 1;
                q.push(e);
            }
        }
        return 0;
    }
    int dfs(int x,int f){
        if(x==T)return f;
        int fl,ret=0,e;
        for(int i=cur[x];~i;i=node[i].nxt){
            e=node[i].to;
            if(lel[e]==lel[x]+1){
                fl=f-ret;
                fl=dfs(e,min(fl,node[i].v));
                ret+=fl;
                node[i].v-=fl;node[i^1].v+=fl;
                if(f==ret)return f;
            }
        }
        if(!ret)lel[x]=-1;
        return ret;
    }
    int dinic(){
        int ans=0;
        while(bfs()){
            mcp(cur,head);
            ans+=dfs(S,inf);
        }
        return ans;
    }
  • 相关阅读:
    Nodejs
    webpack与gulp的区别
    gulpjs
    Commonjs、AMD、CMD
    建造者模式
    工厂模式
    设计模式分类
    python的接口
    Python代码教你批量将PDF转为Word
    什么是“堆”,"栈","堆栈","队列",它们的区别?
  • 原文地址:https://www.cnblogs.com/Kurokey/p/5370600.html
Copyright © 2011-2022 走看看