zoukankan      html  css  js  c++  java
  • 网络流

    #include<cstdio>
    #include<algorithm>
    const int N=205,M=405,INF=0x3f3f3f;
    int m,n;
    int src,des,lev[N],cur[N];
    int ecnt=1,adj[N],nxt[M],go[M],cap[M];
    inline void addedge(const int &u,const int &v,const int &w)
    {
        nxt[++ecnt]=adj[u],adj[u]=ecnt,go[ecnt]=v,cap[ecnt]=w;
        nxt[++ecnt]=adj[v],adj[v]=ecnt,go[ecnt]=u,cap[ecnt]=0;
    }
    inline bool bfs()
    {
        static int qn,que[N];
        int u,v,e;
        for(int i=src;i<=des;i++) lev[i]=-1,cur[i]=adj[i];
        que[qn=1]=src;lev[src]=0;
        for(int ql=1;ql<=qn;ql++)
        {
            u=que[ql];
            for(e=adj[u];e;e=nxt[e])
            {
                if(cap[e]>0&&lev[v=go[e]]==-1)
                {
                    lev[v]=lev[u]+1;
                    que[++qn]=v;
                    if(v==des) return true;
                }
            }
        }
        return false;
    }
    inline int dinic(const int &u,const int &flow)
    {
        if(u==des) return flow;
        int res=0,v,delta;
        for(int &e=cur[u];e;e=nxt[e])
        {
            if(cap[e]>0&&lev[u]<lev[v=go[e]])
            {
                delta=dinic(v,std::min(cap[e],flow-res));
                if(delta)
                {
                    cap[e]-=delta;cap[e^1]+=delta;
                    res+=delta;  if(res==flow) break;
                }
            }
        }
        if(res!=flow) lev[u]=-1;
        return res;
    }
    inline int maxflow()
    {
        int ans=0;
        while(bfs()) ans+=dinic(src,INF);
        return ans;
    }
    int main()
    {
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            ecnt=1;
            for(int i=1;i<=n;i++) adj[i]=0;
            src=1,des=n;
            for(int i=1;i<=m;i++)
            {
                int u,v,w;
                scanf("%d%d%d",&u,&v,&w);
                addedge(u,v,w);
            }
            printf("%d
    ",maxflow());
        }
        return 0;
    }
  • 相关阅读:
    微信用户授权,获取code
    关于swiper在vue中不生效的问题
    ES6-Set 和 Map 数据结构
    Js中caller和callee的区别
    类与对象基础总结--继承,多态
    java 类与对象基础整理
    java 的数据库操作--JDBC
    Socket的长连接和短连接
    java 的底层通信--Socket
    算法--树与递归
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6295900.html
Copyright © 2011-2022 走看看