随笔分类 -  网络流

摘要:序: 在之前的博文中,我解释了关于最大流的EK与Dinic算法,以及它们的STL/非STL的实现(其实没什么区别)。本次讲解的是ISAP算法。‘I’,指 improved,也就是说ISAP其实是SAP算法的改进。目前没有官方名称。 经过测试,ISAP的效率在洛谷的板子题中远胜于EK和Dinic的,速 阅读全文
posted @ 2017-04-30 23:22 箜瑟_qi 阅读(955) 评论(0) 推荐(0)
摘要:序: 在之前的文章中实现了不利用STL实现EK算法,效率也较高。这次我们企图简化代码,减少变量的使用与手写模拟的代码。 注意:vector等STL的container在不开O2优化的时候实现同一个效果普遍比手写要慢。 源代码如下: /* About: Max_flow_EK_vector Authe 阅读全文
posted @ 2017-04-22 22:15 箜瑟_qi 阅读(432) 评论(0) 推荐(0)
摘要:序: 既然是个图,并且求边数的最大值。那么这就可以转化为网络流的求最大流问题。 只需要将源点与其中一子集的所有节点相连,汇点与另一子集的所有节点相连,将所有弧的流量限制置为1,那么最大流 == 最大匹配。(感谢yulemao大神的指点) 只需要在初始化的时候修改一下,就可以直接用求最大流的算法模板了 阅读全文
posted @ 2017-04-22 16:05 箜瑟_qi 阅读(1213) 评论(0) 推荐(0)
摘要:背景知识: 什么是二分图? 二分图就是一种特殊的图。这个图可以将整个集合分成了两个子集,满足所有弧都是从其中一子集的顶点射向另一个子集的顶点。同一个子集中的点没有弧相连。 二分图的最大匹配: 二分图的最大匹配就是使两个集合的点尽可能多的一一对应。 本次介绍的是匈牙利算法。 匈牙利算法的原理就是寻找增 阅读全文
posted @ 2017-04-22 15:50 箜瑟_qi 阅读(195) 评论(0) 推荐(0)
摘要:引言: 在最大流(一)中我们讨论了关于EK算法的原理与代码实现,此文将讨论与EK算法同级别复杂度(O(N^2M))的算法——Dinic算法。 Dinic算法用到的思想是图的分层结构,通过BFS将每一个节点标出层次后DFS得到当前增广路。然后继续在残留网络中进行BFS分层,当汇点不在层次网络时(没有连 阅读全文
posted @ 2017-04-09 20:45 箜瑟_qi 阅读(342) 评论(0) 推荐(0)
摘要:这是网络流最基础的部分——求出源点到汇点的最大流(Max-Flow)。 最大流的算法有比较多,本次介绍的是其中复杂度较高,但是比较好写的EK算法。(不涉及分层,纯粹靠BFS找汇点及回溯找最小流量得到最终的答案) EK算法,全名Edmonds-Karp算法(最短路径增广算法)。 首先简单介绍一下网络流 阅读全文
posted @ 2017-04-07 02:32 箜瑟_qi 阅读(1687) 评论(0) 推荐(0)