网络最大流(dinic)

模型

在一张图中,给定一个源点s,给定汇点t,点之间有一些水管,每条水管有一个容量,经过此水管的水流最大不超过容量,问最大能有多少水从s流到t(s有无限多的水)。

解法

dinic算法通过不断寻找增广路的方法得到最大流。

增广路:从源点开始通过一些边到达汇点的边集称为一条增广路。

显然,通过一条增广路的水流是有最小限制的,其就等于增广路上水管最小的通过量。

通过寻找一条条增广路,每次找到后经过的边权都减去最大流量,并将答案加上最大流量,就得到了部分解。

但是部分解不一定是最优的,因为程序不存在反悔机会。比如

对于此图来说如果先找到的增广路是1->2->4->6,在下一次寻找中,1->3->4然后就会发现无路可走了,得出的答案就是1,实际上如果走1->2->5->6和1->3->4->6答案为2,显然更优。

所以,我们在找到一条增广路后需要将经过的路径反向建边构造反悔的路径如图

这是第一次增广选择1->2->4->6之后,对于经过的边反向建立反悔边,如果此时继续寻找增广路,就会选择1->3->4->2->5->6。这两条路径相结合,实际上就是走了1->2->5->6和1->3->4->6这两段。所以在寻找完增广路后反向建边,可以使答案不出问题。

但是这样的做法其实是EK算法,它会被某些特殊数据卡住。如图

网络流(dinic算法)的更多相关文章

  1. poj 1459 Power Network : 最大网络流 dinic算法实现

    点击打开链接 Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 20903   Accepted:  ...

  2. POJ 1273 Drainage Ditches(网络流dinic算法模板)

    POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...

  3. 网络流Dinic算法

    我的模板 例题: https://vjudge.net/problem/HDU-4280 struct Edge { int lst; int from; int to; int cap; int f ...

  4. 高效的网络流dinic算法模版

    #include <cstring> #include <algorithm> #include <vector> #define Maxn 120010 #def ...

  5. POJ 3281 [网络流dinic算法模板]

    题意: 农场主有f种食物,d种饮料,n头牛. 接下来的n行每行第一个数代表第i头牛喜欢吃的食物数量,和第i头牛喜欢喝的饮料数目. 接下来分别是喜欢的食物和饮料的编号. 求解:农场主最多能保证几头牛同时 ...

  6. 网络流Dinic算法模板 POJ1273

    这就是以后我的板子啦~~~ #include <queue> #include <cstdio> #include <cstring> #include <a ...

  7. POJ 3281 网络流dinic算法

    B - Dining Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

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

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

  9. 网络流入门—用于最大流的Dinic算法

    "网络流博大精深"-sideman语 一个基本的网络流问题 最早知道网络流的内容便是最大流问题,最大流问题很好理解: 解释一定要通俗! 如右图所示,有一个管道系统,节点{1,2,3 ...

随机推荐

  1. opencart分类筛选逻辑修改为并且条件

    opencart分类筛选模式默认是或的逻辑,满足条件1或条件2都展现出来,如果想要改成既满足条件1又满足条件2要怎么改呢?有一个插件可以实现,FixFilter OC2x,可以修改默认的筛选条件 1. ...

  2. Linux主机之间ssh免密登录配置方法

    由于公司的生产环境有很多台Linux的CentOS服务器, 为了方便机子(假设两台机子A,B)互相之间免密ssh, scp命令操作,配置如下 1. 在A.B上分别创建本机的公钥和私钥,输入命令后连续三 ...

  3. python 循环结构 while for...in

    # ### 循环结构 while for...in """ 循环结构的特点:减少代码的冗余,提高代码的效率 语法形式: """ # 打印1~ ...

  4. 如何查看端口recv和send

    1.进入到pod的宿主机   一般来说 ssh  slaveX 2.查看进程号   top可以看到 3.执行命令    nsenter --target 10594 --net netstat -an

  5. Oracle数据库查询所有关键字

    管理员账户登录后,执行以下命令:  select * from v$reserved_words

  6. KubeCon + CloudNativeCon论坛2019上海

    2019年,KubeCon + CloudNativeCon和Open Source Summit在将在中国共同举办一场活动. In 2019, KubeCon + CloudNativeCon an ...

  7. cocos creator使用anysdk接入admob广告教程

    http://lolling787.lofter.com/post/1f5b6553_12925042 cocos creator使用anysdk接入admob广告

  8. spring-data-radis错误

    org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested ...

  9. Beep函数实现硬件蜂鸣声

    #include <Windows.h> #include <tchar.h> int WINAPI _tWinMain(HINSTANCE hInstance, HINSTA ...

  10. Python 写了个小程序,耗时一天,结果才100多行

    from selenium import webdriver import selenium.webdriver.support.ui as ui from selenium.webdriver.co ...