n为节点数量,m为边数量 EK算法复杂度:O(n*m^2) dinic算法复杂度:O(n^2*m) EK算法思想就是先用bfs找到一条增广路(从源点到汇点有流量的路),然后用pre数组记录这条路径上每一个节点的上一个节点。之后利用pre数组完成对这条路上所有边流量的消减,以及增加答案。看代码就清楚了 ...
分类:
编程语言 时间:
2021-03-29 12:24:11
阅读次数:
0
二分图相关定理 最小顶点覆盖数 \(n\) = 最大匹配数 \(m\) 对于每组匹配点 \((u, v)\), 发现其中只有一个点会连向非匹配点. 证明: 如果 \(u\) 连向非匹配点 \(x\), \(v\) 连向非匹配点 \(y\), 那么可以找到增广路 \(x->u->v->y\). 与匹配 ...
分类:
其他好文 时间:
2020-10-26 11:28:18
阅读次数:
17
(环的最大匹配方式有多种这里不予讨论) 设最大匹配数为K ,点数为N 最小点覆盖集:就是用最少的点集G,使这个图上的所有线段的左端点或右端点属于G 证明: 由于所有最大匹配的线段都不相交,只要取左端点或右端点就可以,所以最大匹配的每一个线段都对应了一个点,一共有K个 因为是最大匹配,不存在增广路,当 ...
分类:
其他好文 时间:
2020-07-29 22:00:40
阅读次数:
84
网络流 dinic及当前弧优化 前言 dinic比较适合学习完km之后再学习。因为dinic感觉像是km的一种优化。总之难度不是特别大 dinic算法 好了,言归正传。先分析一下km为什么效率低下?因为km每一次寻找maxflow,就确确实实只会找一条增广路。但事实上,一个图可能会同时有多条增广路, ...
分类:
其他好文 时间:
2020-06-30 00:25:13
阅读次数:
102
证明不会:yxc说要用匈牙利算法,来确定增广路径;算法步骤:1.将牛按minspf从大到小排序2.每次取出满足当前条件,最大的spf。因为是按开始从大到小排序,所以假设x, y防晒,spfs[x] < spfs[y], 那么可能后面的牛能用到x,y,或者只用到x,或者都用不上。因为后面的牛可能可以用 ...
分类:
其他好文 时间:
2020-04-15 00:46:47
阅读次数:
53
Dinic 时间复杂度最坏 O(n*n*m) 平均O(n)。 算法思路:用BFS构建层次图,如果汇点不在层次图中则结束算法返回最大流,否则在层次图中DFS找到图中所有增广路,增广结束后重新建立层次图。 优化:多路增广优化:将节点的所有增广路的到的流量记录下来直接返回。 炸点优化:若改点无流量直接弃掉 ...
分类:
编程语言 时间:
2020-03-26 19:19:08
阅读次数:
95
代码介绍: 文件数据格式:点的数量,边的数量,源点序号,汇点序号 每条边:起点,终点,容量 从文件中读取数据,构建网络流图,使用dinic算法求解最大流,采用数组邻接表存储数据。 求最大流过程:不断找一条源点到汇点的路径,若有,找出增广路径上每一段权值的最小值,然后构建残余网络。再在残余网络上寻找新 ...
分类:
其他好文 时间:
2020-02-21 12:58:05
阅读次数:
82
$\quad$ Dinic 算法其实已经足够处理大多数的网络流了,但还不够快。接下来介绍的是最优秀的增广路最大流算法: ISAP (Improve Shortest Argumenting Path)。它的时间复杂度上界与 Dinic 一样,为 $O(n ^ 2 \cdot m)$。 $\quad$ ...
分类:
编程语言 时间:
2020-02-11 19:15:17
阅读次数:
99
实现参考: http://blog.sina.com.cn/s/blog_60a0e97e0101bfj9.html 介绍流、割、最大流、最小割、最大流最小割定理、增广路径、残存网络、Ford-Fulkerson算法 https://blog.csdn.net/sinat_41613352/arti ...
分类:
其他好文 时间:
2020-01-08 14:49:50
阅读次数:
111
基本思想是利用涂色的方法,用黑白两种颜色把方格全部涂色,相邻方格不同色。 方法1:基于二分图匹配的思想 一开始也想过二分图匹配,但数据量太大,就放弃了这种想法。其实根据增广路的定义。如果白色的方格的数量小于黑色方格数量,那么当白色方格还没有匹配完时,一定有黑色的方格没有匹配。那么从该白色的方格出发, ...
分类:
其他好文 时间:
2019-12-27 21:46:10
阅读次数:
71