美文网首页
经典最大流问题(板子)

经典最大流问题(板子)

作者: 不知名小号 | 来源:发表于2018-10-07 06:11 被阅读16次

mark一个板子
原文地址

#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;

#define maxn 220
#define INF 0x7f7f7f7f
int cap[maxn][maxn],flow[maxn][maxn];
int pre[maxn],res[maxn];//res[i] 残量
int Edmonds_Karp(int start,int end)
{
    int maxflow=0;
    memset(flow,0,sizeof(flow));
    memset(pre,0,sizeof(pre));
    queue<int> q;
    while(true)
    {
        memset(res,0,sizeof(res));
        res[start]=INF;
        q.push(start);
        while(!q.empty()) //BFS寻找增广路
        {
            int u=q.front();
            q.pop();
            for(int v=1;v<=end;v++)
                if(!res[v]&&cap[u][v]>flow[u][v])
                {
                    res[v]=min(res[u],cap[u][v]-flow[u][v]);//start-v路径上的最小残量
                    //记录v的父亲,并加入队列中
                    pre[v]=u;
                    q.push(v);
                }
        }
        if(res[end]==0) return maxflow;//无法继续更新最大流量,则当前流已经是最大流
        for(int u=end;u!=start;u=pre[u])//从汇点往回走
        {
            flow[pre[u]][u]+=res[end];//更新正向流
            flow[u][pre[u]]-=res[end];//更新反向流
        }
        maxflow+=res[end]; //更新从s流出的总流量
    }
}
int main()
{
    //freopen("in.txt", "r", stdin);
    int t, n, m;
    cin >> t;
    while (t--){
        cin >> n >> m;
        memset(cap,0,sizeof(cap));
        
        for(int i = 0; i < m; i++)
        {
            int u,v,s;
            scanf("%d %d %d",&u,&v,&s);
            cap[u][v]+=s;//要考虑到重边问题
        }
        cout << Edmonds_Karp(0, n + 1) << endl;
    }
    return 0;
}

相关文章

  • 经典最大流问题(板子)

    mark一个板子原文地址

  • 最大流问题

    首先要先清楚最大流的含义,就是说从源点到经过的所有路径的最终到达汇点的所有流量和。

  • 最大流问题

    图中括号外的数字代表允许容量,括号内的数字代表了实际流量。解法步骤:(1)在已知可行流基础上,通过标号寻找增广链。...

  • Ford-Fulkerson算法正确性证明

    问题描述 图论中有一类重要的问题就是流量问题。求一个流网络的最大流量。那么可以用的方法有很多,比较经典的是FF(F...

  • 狼人杀

    对于这个游戏来说,需要一些天赋和练习,入门难度还是不小,逻辑与语言表达都是需要较高能力。 从最简单的经典的板子,到...

  • 总结几个Qt版本的冷知识

    Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的(很多嵌入式板子还是用Qt4.8),其实该版本是...

  • 经典小故事《随大流》

    一天,苏格拉底上课时, 从短袍中掏出一个苹果: “大家集中精力,嗅闻空气中的气味。” 然后,他回到讲台,举着苹果问...

  • Linux下pn532板子测试学校水卡

    0x01买板子 最便宜的板子pn532,需要买usb转串口的设备,对于kali-rolling,好像是通杀的,无论...

  • 2020-5-9《大流感·最致命瘟疫的史诗》

    【主题】1918年的大流感 【书籍】《大流感——最致命瘟疫的史诗》 【作者】【美】约翰·M·巴里(John M. ...

  • 【模板】网络最大流Edmonds-Karp算法

    关于网络最大流的资料Edmonds_Karp 算法 (转)USACO 4.2.1 Ditch 网络最大流问题算法小结

网友评论

      本文标题:经典最大流问题(板子)

      本文链接:https://www.haomeiwen.com/subject/ocbkaftx.html