容量网络:在有向图D=(V,A),指定一个点为发点,记作 s,指定另一个点为收点,记作 t,其余点叫作中间点。对于A的每条弧(Vi,Ai),都对应一个权数 C ≥0,称为弧(Vi , Ai)的容量,将这样的赋权有向图叫作一个容量网络,记作D=(V,A,C)。

这有点不好懂,我解释一下网络最大流的意思是,从s(源点)到t(汇点)需要通过n条路径也有可能有一条s和t直接相连的,每一条路径能通过的最大流量(容量网络)又不尽相同,我们要求的是从s到t的最大流量,如图:

从1到4的路径有:(1)1—>4;(2)1—>2—>4;(3)1-->2-->3-->4

(1)的最大流量显然是20;(2)的最大流量是20;(3)的最大流量是10;

因为20+10+10(三条路径最大流量)<20+40(从1出发的最大流量);所以根据此图可以找到1到4的最大流为20+10+10=50;

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue>
using namespace std;
const int MAX=;
int map[][],flow[],pre[],n,m;
bool vis[];
int BFS()
{
int up;
queue<int> q;
vis[]=;
memset(pre,-,sizeof(pre));
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++)
flow[i]=MAX;
q.push();
while(!q.empty())
{
up=q.front();
q.pop();
if(up==n)
break;
for(int i=;i<=n;i++)
{
if(!vis[i]&&map[up][i]>)
{
vis[i]=;
flow[i]=min(flow[up],map[up][i]);
pre[i]=up;
q.push(i);
}
}
}
if(!vis[n]||n==)
return -;
return flow[n];
}
int EK()
{
int d,maxflow=,up,down;
maxflow=;
while((d=BFS())!=-)
{
maxflow+=d;
down=n;
while(down!=)
{
up=pre[down];
map[up][down]-=d;
map[down][up]+=d;
down=up;
}
}
return maxflow;
}
int main()
{
int T,a,b,c,h=,i;
scanf("%d",&T);
while(T--)
{
memset(map,,sizeof(map));
scanf("%d%d",&n,&m);
for(i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b]+=c;
}
printf("Case %d: %d\n",h++,EK());
}
return ;
}

网络最大流的(Edmond Karp)算法的更多相关文章

  1. 网络最大流Dinic

    1.什么是网络最大流 形象的来说,网络最大流其实就是这样一个生活化的问题:现在有一个由许多水管组成的水流系统,每一根管道都有自己的最大通过水流限制(流量),超过这个限制水管会爆(你麻麻就会来找你喝茶q ...

  2. 最大流算法之Ford-Fulkerson算法与Edmonds–Karp算法

    引子 曾经很多次看过最大流的模板,基础概念什么的也看了很多遍.也曾经用过强者同学的板子,然而却一直不会网络流.虽然曾经尝试过写,然而即使最简单的一种算法也没有写成功过,然后对着强者大神的代码一点一点的 ...

  3. 一般增广路方法求网络最大流(Ford-Fulkerson算法)

    /* Time:2015-6-18 接触网络流好几天了 写的第一个模版————Ford-Fulkerson算法 作用:求解网络最大流 注意:源点是0 汇点是1 如果题目输入的是1到n 请预处理减1 * ...

  4. 算法模板——Dinic网络最大流 2

    实现功能:同Dinic网络最大流 1 这个新的想法源于Dinic费用流算法... 在费用流算法里面,每次处理一条最短路,是通过spfa的过程中就记录下来,然后顺藤摸瓜处理一路 于是在这个里面我的最大流 ...

  5. 图论算法-网络最大流【EK;Dinic】

    图论算法-网络最大流模板[EK;Dinic] EK模板 每次找出增广后残量网络中的最小残量增加流量 const int inf=1e9; int n,m,s,t; struct node{int v, ...

  6. 网络最大流算法—EK算法

    前言 EK算法是求网络最大流的最基础的算法,也是比较好理解的一种算法,利用它可以解决绝大多数最大流问题. 但是受到时间复杂度的限制,这种算法常常有TLE的风险 思想 还记得我们在介绍最大流的时候提到的 ...

  7. P3376 【模板】网络最大流dinic算法

    P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...

  8. 网络最大流算法—Dinic算法及优化

    前置知识 网络最大流入门 前言 Dinic在信息学奥赛中是一种最常用的求网络最大流的算法. 它凭借着思路直观,代码难度小,性能优越等优势,深受广大oier青睐 思想 $Dinic$算法属于增广路算法. ...

  9. [学习笔记] 网络最大流的HLPP算法

    #define \(u\)的伴点集合 与\(u\)相隔一条边的且\(u\)能达到的点的集合 \(0x00~ {}~Preface\) \(HLPP(Highest~Label~Preflow~Push ...

随机推荐

  1. OpenCV学习笔记十八:opencv_flann模块

    一,简介: Fast Library for Approximate Nearest Neighbors (FLANN)算法库.

  2. LoadRunner 测试java代码

    LR12 JDK 1.7,32位 环境变量配好 待测的java jar包及其依赖的jar包都整理好,放在jdk的lib目录下,也要把jar包放在脚本目录下! =====>新建Java Vuser ...

  3. fiddler抓包工具使用图文教程

    一.软件简介: 一款免费且功能强大的数据包抓取软件.它通过代理的方式获取程序http通讯的数据,可以用其检测网页和服务器的交互情况,能够记录所有客户端和服务器间的http请求,支持监视.设置断点.甚至 ...

  4. jetty;linux 目录结构

    [说明]今天看了看jetty这个web容器,上午看基础理论框架知识(后面半点没用到),下午下载了jetty,并且在上面部署了一个war应用,晚上在做eclipses整合jetty的时候出现了问题,下载 ...

  5. 【转】再谈CLR查找和加载程序集的方式

    这是一个老问题,以前也有朋友写过一些文章介绍,但可能还不是很全面.我也多次被人问到,这里结合案例再次谈谈,希望对大家有所帮助. 本文范例代码可以通过这里下载 http://files.cnblogs. ...

  6. 关于webpack打包图片的路径问题

    在webpack打包的时候,用css-loader的时候,在css文件里用的引用的背景的图片的时候,如果是url()...那么里面的路径不能用相对路径,得用绝对路径,而且必须是带http的,幸好,,, ...

  7. Introduction to Mathematical Thinking - Week 2

    基本数学概念 real number(实数):是有理数和无理数的总称 有理数:可以表达为两个整数比的数(a/b, b!=0) 无理数是指除有理数以外的实数 imply -- 推导出 不需要 A 能推导 ...

  8. Power Systems 虚拟化简介

    本文向您详细地介绍了 Power System 虚拟化相关的技术和亮点,让您对这些最新的虚拟化技术有一个全面的了解.本文来自 IBM Systems Magazine for AIX 中文版. 自从引 ...

  9. HTML页面布局

    接下来的下面代码,只是给了一个大的前端编写布局,如果你已经是牛人了,就当没看到,如果是一些初学者,不妨拿去用用,里面也写了一些常用的css样式,现在虽然有很多牛逼的前段框架,用起来也非常得心应手,但是 ...

  10. 通过配置rinetd来实现ECS跳转访问非外网连接的mongodb

    跳转的原理通用,不单单针对mongo,其他需求应用也可以使用这种方式   生成环境中的mongodb迁移到了阿里云上的mongodb,由于机制的问题,mongodb不能直接被外网访问,故此采用的办法为 ...