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

    源点到汇点的问题:
    理解:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html

    代码(蓝桥杯):https://blog.csdn.net/Tiooo111/article/details/105268608/

    #include <bits/stdc++.h>
    using namespace std;
    
    int N,M;
    int s,t;
    int res;
    
    map<int,map<int,int> >  mp;
    vector<int> a;
    vector<int> pre;
    
    void Solution(){
         queue<int> que;
        while(1){//从源点开始找
    
            a.assign(N+1,0);  //初始化 a
            a[s]=INT_MAX;     //源点相当于有无限的流量
            que.push(s);      //每次都是从源点开始找
            
            while(!que.empty()){  //bfs找增广路
                int v=que.front();
                que.pop();
                for(map<int,int>::iterator i=mp[v].begin();i!=mp[v].end();++i){
                    if(!a[i->first]&&i->second>0){
                        pre[i->first]=v;
                        a[i->first]=min(a[v],i->second);
                        que.push(i->first);
                    }
                }
            }
            
            if(a[t]==0)return;//没有剩余的流量了
            
            res+=a[t];
            for(int i=N;i!=1;i=pre[i]){//更新走过的路的流量
                mp[pre[i]][i]-=a[t];
                mp[i][pre[i]]+=a[t];
            }
        }
    }
    int main(){
        cin>>N>>M;
        for(int i=0;i<M;++i){
            int k,j,l;
            cin>>k>>j>>l;
            mp[k][j]+=l;//是+= 不是= 一条边可能会重复出现
        }
        s=1;//源点
        t=N;//汇点
        pre.assign(N+1,0);
        Solution();
        cout<<res<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    利用js在Table中追加数据
    C#API配置跨域
    C#linq查询DataTable
    erlang格式化输出
    erlang 的源代码保护机制
    MP3格式音频文件结构解析
    使用异步 I/O 大大提高应用程序的性能
    虚拟机安装mac 关键是换引导
    C/C++规则整理
    字节对齐
  • 原文地址:https://www.cnblogs.com/cxwpluto/p/13157696.html
Copyright © 2011-2022 走看看