今天自习课没事干,看书自学了一下网络流中的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. shell----删除文件中的^M

    在Linux下使用vi来查看一些在Windows下创建的文本文件,有时会发现在行尾有一些“^M”.有几种方法可以处理. 1.使用vi的替换功能.启动vi,进入命令模式,输入以下命令: :%s/^M$/ ...

  2. 优秀 Java 程序员写代码的风格

    往 期 精 彩 推 荐    [1]Java Web技术经验总结 [2]15个顶级Java多线程面试题及答案,快来看看吧 [3]面试官最喜欢问的十道java面试题 [4]从零讲JAVA ,给你一条清晰 ...

  3. Service Fabric eShop On Containers

    Service Fabric承载eShop On Containers 从模块化到微服务化 从Pet Shop 到eShop on Container都是Microsoft在技术演进的路径上给开发者展 ...

  4. Ace admin 如何实现类似于freamset加载页面

    如上标题所述,ace admin做后台页面的时候,可以实现类似于用freamset的功能,但是ace admin做的比freamset更好,他可以用异步加载的形式展示,而加载的页面的内容可以尽可能的少 ...

  5. 百度地图隐藏LOGO显示

    在引入地图的页面加入下列样式即可隐藏百度地图左下角的LOGO   <style type="text/css">   .anchorBL{display:none;} ...

  6. codechef Transform the Expression 转换成逆波兰式

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  7. poj 3253 Fence Repair (STL优先队列)

    版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/34805369 转载请注明出 ...

  8. [JLOI2016/SHOI2016]侦察守卫

    嘟嘟嘟 这道题可以说是[HNOI2003]消防局的设立的升级版.距离从2改为了d. 辛亏d只有20,这也就是一个切入点. 令f[u][j]表示u四周 j - 1的距离需要被覆盖,g[u][j]表示u可 ...

  9. 10.spring:常用的数据库代码.....(不长使用了解即可)

    测试代码: ApplicationContext ctx = new ClassPathXmlApplicationContext("JDBC.xml"); DataSource ...

  10. fastTime格式化时间

    { field: 'alarmTime', title: '告警时间', align: 'center', width: 90, valign: 'middle', formatter:functio ...