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

网络流模板

时间:2018-07-27 12:06:31      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:code   ++   empty   struct   nbsp   div   void   this   mod   

const int maxn = 1e5+2;
const int INF  = 1<<30;
const int mod  = 1e9+7;
struct Edge{
     int from,to,cap,flow;
};

struct Dinic
{
    int n,m,s,t;
    vector<Edge>edge;
    vector<int>G[maxn];
    bool vis[maxn];
    int d[maxn];
    int cur[maxn];
    void init(int n){
        this->n = n;
        for(int i=0;i<=n;i++)G[i].clear(),edge.clear();
    }
    void addedge(int from,int to,int cap){
        edge.pb((Edge){from,to,cap,0});
        edge.pb((Edge){to,from,0,0});
        m = edge.size();
        G[from].pb(m-2);
        G[to].pb(m-1);
    }
    bool bfs(){
        mem(vis,0);
        queue<int>Q;
        Q.push(s);
        d[s] = 0;
        vis[s] = 1;
        while(!Q.empty()){
            int x = Q.front(); Q.pop();
            int sz = G[x].size();
            for(int i=0;i<sz;++i){
                Edge &e = edge[G[x][i]];
                if(!vis[e.to] && e.cap>e.flow){
                    vis[e.to] = 1 ;
                    d[e.to] = d[x] + 1;
                    Q.push(e.to); 
                }
            }
        }
        return vis[t];
    }
    int dfs(int x,int a){
        if(x == t || a == 0)return a;
        int flow = 0,f;
        int sz = G[x].size();
        for(int &i = cur[x];i<sz;i++){
            Edge &e = edge[G[x][i]];
            if(d[x] + 1 == d[e.to] && (f = dfs(e.to,min(a,e.cap - e.flow)))>0){
                e.flow += f;
                edge[G[x][i]^1].flow -=f;
                flow += f;
                a -= f;
                if(a==0)break;
            }
        }
       // if(!flow) d[x] = -2;  //炸点优化
        return flow;
    }
    int maxflow(int s,int t){
        this->s = s; this -> t = t;
        int flow = 0;
        while(bfs()){
            mem(cur,0);
            flow += dfs(s,INF);
        }
        return flow;
    }
};

 

网络流模板

标签:code   ++   empty   struct   nbsp   div   void   this   mod   

原文地址:https://www.cnblogs.com/windystreet/p/9376380.html

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