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

    由于我比较懒

    博客写的不够精致

    所以

    https://blog.csdn.net/txl199106/article/details/64441994

    哈哈哈哈哈哈哈这个博客里面的比喻能笑死哈哈哈哈哈哈

    首先是一般的最大流算法 

    /*
    一般增广路算法(EdmondsKarp)
    O m*m*n
    codevs 1993
    比较朴素的最大流算法
    贪心的方法:找还可以放水的边或者流量大于零反边 
    找到s-t的路径 如果没有 end 
    否则 正向流量减去,反向加上相应的流量(类似回溯用)
    每次Bfs找增广路 记录前驱
    然后找路径的最小值 更新网络 
    */
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<queue>
    #define maxn 210
    using namespace std;
    int n,m,G[maxn][maxn],vis[maxn],pre[maxn],ans;
    queue<int>q;
    bool Bfs(){
        while(!q.empty())q.pop();
        memset(vis,0,sizeof(vis));
        memset(pre,0,sizeof(pre));
        q.push(1);vis[1]=1;
        while(!q.empty()){
            int k=q.front();q.pop();
            for(int i=1;i<=n;i++)
                if(G[k][i]>0&&!vis[i]){
                    vis[i]=1;pre[i]=k;q.push(i);
                    if(i==n)return 1;
                }
        }
        return 0;
    }
    int main(){
        scanf("%d%d",&m,&n);
        int u,v,t;
        memset(G,0,sizeof(G));
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&u,&v,&t);
            G[u][v]+=t;
        }
        while(Bfs()){
            int pos=n,mt=2e9;
            while(pre[pos]){
                mt=min(mt,G[pre[pos]][pos]);
                pos=pre[pos];
            }
            pos=n;ans+=mt;
            while(pos){
                G[pre[pos]][pos]-=mt;
                G[pos][pre[pos]]+=mt;
                pos=pre[pos];
            }
        }
        printf("%d
    ",ans);
        return 0; 
    }
  • 相关阅读:
    什么是css权重
    html5 canvas画五角星(美国队长)
    从输入URL到页面加载发生了什么
    javascript之事件委托(转)
    javascript之常用排序算法
    javascript之闭包
    javascript二维数组的删除
    javascript之apply()、call()
    div+css两列布局与三列布局
    css处理水平居中问题(淘宝双飞翼布局)
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/9388047.html
Copyright © 2011-2022 走看看