今天自习课没事干,看书自学了一下网络流中的EK算法。(求最大流)

设s为源点,t为汇点,C为容量矩阵,F为流量矩阵,f为最大流量。

1.初始化F,f

2.用BFS在残量网络中找到一条从s到t的最短增广路T,如果T不存在,算法结束。

  最短增广路就是最短路径(s→t)

  一边(u,v)被增广完后,在残量网络中就不存在(u,v)这条边,只有(v,u)这条边了。(即不存在(u,v)这条路径)

3.m=min(u,v)∈T{C(u,v)-F(u,v)} (最短增广路径中残量网络中最小的边)

4.f+=m

5.沿着T修改矩阵,对于任意(u,v)∈T,将F(u,v)增加m,F(u,v)减少m

  F(u,v)之所以要减少m是因为有可能会出现以下情况:

  假设求出增广路径1→2→3→4

  但发现其实1→3→4+1→2→4更优

  这就需要反向建边

6.repeat 2.

code:

#include <cstdio>
#include <cstring>
#include <algorithm>
#define F(i,x,y) for(int i=x;i<=y;i++)
using namespace std; const int MAXN=;
int N,M,a[MAXN][MAXN];
int pre[MAXN],vis[MAXN],l[MAXN],h,t,S,T; int BFS()
{
memset(pre,-,sizeof(pre));
memset(vis,,sizeof(vis));
h=t=;pre[S]=S,vis[S]=;l[++t]=S;
while(h<t){
int P=l[++h];
for(int i=;i<=N;i++){
if(a[P][i]>&&!vis[i]){
vis[i]=;
pre[i]=P;
if(i==T)return true;
l[++t]=i;
}
}
}
return false;
} int EK()
{
int F=,w=2e9;
while(BFS()){
for(int i=T;i!=S;i=pre[i])w=min(w,a[pre[i]][i]);
for(int i=T;i!=S;i=pre[i]){
a[i][pre[i]]+=w;
a[pre[i]][i]-=w;
}
F+=w;
}
return F;
} int main()
{
while(scanf("%d%d%d%d",&N,&M,&S,&T)!=EOF){
memset(a,,sizeof(a));
int u,v,w;
F(i,,M){
scanf("%d%d%d",&u,&v,&w);
a[u][v]+=w;
}
printf("%d\n",EK());
}return ;
}

网络流Edmonds-Karp算法入门的更多相关文章

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

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

  2. 网络流(一)——Edmonds Karp算法

    首先是一些关于网络流的术语: 源点:即图的起点. 汇点:即图的终点. 容量:有向边(u,v)允许通过的最大流量. 增广路:一条合法的从源点流向汇点的路径. 网络流问题是在图上进行解决的,我们通常可以将 ...

  3. [知识点]网络流之Dinic算法

    // 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrg4.html      ...

  4. 【转】 SVM算法入门

    课程文本分类project SVM算法入门 转自:http://www.blogjava.net/zhenandaci/category/31868.html (一)SVM的简介 支持向量机(Supp ...

  5. 三角函数计算,Cordic 算法入门

    [-] 三角函数计算Cordic 算法入门 从二分查找法说起 减少乘法运算 消除乘法运算 三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来 ...

  6. 循环冗余校验(CRC)算法入门引导

    目录 写给嵌入式程序员的循环冗余校验CRC算法入门引导 前言 从奇偶校验说起 累加和校验 初识 CRC 算法 CRC算法的编程实现 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式.在嵌 ...

  7. 【算法入门】广度/宽度优先搜索(BFS)

    广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...

  8. (转)三角函数计算,Cordic 算法入门

    由于最近要使用atan2函数,但是时间上消耗比较多,因而网上搜了一下简化的算法. 原帖地址:http://blog.csdn.net/liyuanbhu/article/details/8458769 ...

  9. hihocoder网络流一·Ford-Fulkerson算法

    网络流一·Ford-Fulkerson算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho住在P市,P市是一个很大很大的城市,所以也面临着一个大城市都会遇 ...

  10. hdu2389二分图之Hopcroft Karp算法

    You're giving a party in the garden of your villa by the sea. The party is a huge success, and every ...

随机推荐

  1. WSDM 2014推荐系统论文

    Xiao Yu, Hao Ma, Paul Hsu, Jiawei Han On Building Entity Recommender Systems Using User Click Log an ...

  2. webpack学习(三)html-webpack-plugin插件

    一.html-webpack-plugin插件 简单创建 HTML 文件,用于服务器访问 例如:我们要为输出文件添加哈希值标记,避免老的不变的文件重新加载,避免新修改的文件受缓存影响. 在前后两次在终 ...

  3. jQuery插件开发精品教程,让你的jQuery提升一个台阶(转)

    原文:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发 ...

  4. 重大漏洞!PHP multipart/form-data头部解析远程拒绝服务漏洞

    "有些人看不懂,简单比喻来说吧:目前刚出的任何安全防护都不会拦,网站类专属漏洞 畸形数据包,2KB随机数据包,2M网速打死各种网站,cdn通挂!"PHP multipart/for ...

  5. C语言main函数的参数

    在Windows下使用gcc编译器: 1.首先介绍下MinGW MinGW(Minimalist GNU for Windows),又称mingw32,是将GCC编译器和GNU Binutils移植到 ...

  6. redis持久化那些事(kēng)儿

    这是一篇包含了介绍性质和吐槽性质的日志.主要介绍一下我学习redis持久化时候被坑的经历.redis的使用介绍现在没有打算写,因为比较多,以我如此懒的性格...好吧,还是有点这方面想法的,不过一篇博客 ...

  7. HDU 2588 GCD 【Euler + 暴力技巧】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2588 GCD Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  8. __future__模块

    Python提供了__future__模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中使用一些新版本的特性,比如除法: 在Python 2.x中,对于除法有两种情况,如果是整数相除 ...

  9. python中的sum函数.sum(axis=1)

    看起来挺简单的样子,但是在给sum函数中加入参数.sum(a,axis=0)或者是.sum(axis=1) 就有点不解了 在我实验以后发现 我们平时用的sum应该是默认的axis=0 就是普通的相加 ...

  10. MacBook常用快捷键

    MacBook常用快捷键: 1. 窗口操作: cmd+n 新建一个窗口/文件. cmd+m 窗口最小化. cmd+w 关闭当前窗口/文件. 2. 程序操作: cmd+q 退出当前程序,后台不运行该程序 ...