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

    学习博客:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html

    入门题:poj1273

    题意:求最大流

    题解:直接套用网络流的模板,注意,如果重边,那么将边加起来,而不是取最大值,注意:这题多组输入

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <ctime>
    #include <cstdlib>
    #include <vector>
    #include <stack>
    #include <algorithm>
    #include <map>
    #include <queue>
    using namespace std;
    #define ll long long
    const int maxn=210;
    const int maxm=210;
    ll ma[maxn][maxn];
    bool vis[maxn];
    int pre[maxn],n,m;;
    ll get_path(int s,int t)
    {
        for(int i=0; i<maxn; i++)vis[i]=0,pre[i]=-1;
        queue<int>que;
        que.push(s);
        vis[s]=1;
        ll res=1e9;
        while(que.size())
        {
            int x=que.front();
            que.pop();
            for(int i=1; i<=n; i++)
            {
                if(vis[i]==0&&ma[x][i]!=0)
                {
                    vis[i]=1;
                    pre[i]=x;
                    res=min(res,ma[x][i]);
                    que.push(i);
                    if(i==t)return res;//到达终点
                }
            }
        }
        return 0;//无法到达终点
    }
    void updata(int t,int add)//更新边
    {
        int i=t;
        while(pre[i]!=-1)
        {
            ma[pre[i]][i]-=add;
            ma[i][pre[i]]+=add;
            i=pre[i];
        }
    }
    int main()
    {
    
        while(cin>>m>>n)
        {
            memset(ma,0,sizeof(ma));
            for(int i=1; i<=m; i++)
            {
                ll a,b,c;
                scanf("%lld %lld %lld",&a,&b,&c);
                ma[a][b]+=c;
            }
            ll ans=0;
            while(1)
            {
                int add=get_path(1,n);
                if(add==0)break;
                updata(n,add);
                ans+=add;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    ans_rproxy 说明
    ubuntu adduser
    linux 修改 elf 文件的dynamic linker 和 rpath
    What Is The Promiscuous Mode
    gpart 分区工具
    TortoiseSVN的基本使用方法
    svn和git的区别及适用场景
    TortoiseSVN 和 VisualSVN Server 使用教程
    SVN中trunk、branches、tag的使用
    C/C++中substr函数的应用(简单讲解)
  • 原文地址:https://www.cnblogs.com/carcar/p/9736450.html
Copyright © 2011-2022 走看看