标签:www. 解法 遍历 算法 定义 str dinic 网络 不能
最大流:
(1)最大流定义:
在容量网络中,满足弧流量限制条件,且满足平衡条件并且具有最大流量的可行流,称为网络最大流,简称最大流。
(2)最大流判断两点之间是否有流量:
通过判断它的逆向边是否有流来实现。
费用流:
(1)费用流定义:
费用流,也叫作最小费用最大流,是指在普通的网络流图中,每条边的流量都有一个单价,求出一组可行解,使得在满足它是最大流的情况下,总的费用最小。
2.初始化spfa时dis数组全从INF改为-INF,松弛的条件从 dis[i]>dis[j]+cost[i,j]改为dis[i]<dis[j]+cost[i,j] 。
最小割:
(1)最小割定义:
假设在原图中,删掉某些边,能够使得从s出发到不了t,则这些边的集合被称作图的割。 定义最小割,为容量和最小的割。
(2)最大流最小割定理:
最大流最小割定理是网络流理论的重要定理。是指在一个网络流中,能够从源点到达汇点的最大流量等于如果从网络中移除就能够导致网络流中断的边的集合的最小容量和。即在任何网络中,最大流的值等于最小割的容量。
(3)输出最小割:若是要输出最小割,在最后dinic算法结束的残留网络中,从源点寻找所有与源点仍然连接的点,并打上标记。这样若某一条边的两个端点,一个带标记,一个不带标记,则这条边可以作为最小割的边删去。我个人理解这样删去的边应该是第一阶段满流的那几条边。这样删除的边最后肯定是满足最小割的,但是边数可能不是最少的。
(4)求最小割且割数最小:
跑两遍dinic,第一遍跑最大流,求得最小割是多少,第二遍把第一遍中满流的边权设为1,其他设为inf,再跑一边最小割,求得最少需要割去几条边。
最大权闭合子图:
(1)定义:
一个子图(点集), 如果它的所有的出边都在这个子图当中,那么它就是闭合子图。 点权和最大的闭合子图就是最大闭合子图。
(2)求最大权闭合子图:
设s为源点,t为汇点。使s连向所有的正权点,边权为点权。使所有负权点连向t,边权为点权的绝对值。若要选x必须先选y,连一条由x到y的边,边权是INF。最大点权和=正权点和-最小割。
(3)输出最大权闭合子图:
最大权闭合子图的问题可以转化为求解最小割的问题,我们所求的闭合子图是最小割产生的两个子图中,与源点连接的那个子图。最大权闭合子图的题目很特殊,它的最小割的边都是与源点或者汇点直接相连,如果答案的方法是唯一的话,那么最小割应该也是唯一的(个人猜测),这样的话在dinic之后从源点开始遍历与源点仍然连接的点,这些点都是最大权闭合子图中的点。
DAG最小路径覆盖:
(1)定义:
在一个有向无环图中,找出最少的路径,使得这些路径经过了所有的点,且这些路径之间不会经过相同的点。
(2)求最小路径覆盖:
把原图的每个点V拆成Vx和Vy两个点,如果有一条有向边A->B,那么就加边Ax?>By。这样就得到了一个二分图。那么最小路径覆盖=原图的结点数-新图的最大匹配数。
证明:
一开始每个点都是独立的为一条路径,总共有n条不相交路径。我们每次在二分图里找一条匹配边就相当于把两条路径合成了一条路径,也就相当于路径数减少了1。所以找到了几条匹配边,路径数就减少了多少。所以有最小路径覆盖=原图的结点数-新图的最大匹配数。因为路径之间不能有公共点,所以加的边之间也不能有公共点,这就是匹配的定义。
(3)输出每条路径上的点:
考虑我们是如何求最小路径覆盖的,我们一开始认为路径集合就是点集,然后找到一个匹配边,把这个边的两个点所在的集合合并成一个集合(其实就是把两条路径合并成一条路径)。如果最大匹配是用最大流写的,则最后判断某两个点是否在一条路径上,就直接判断它们的反向边是否有流量(注意这里的两个点并不是任意的两个点,而是一条路径上相邻的两个点)。这样按照某种顺序就可以按顺序输出每条边上的点。
标签:www. 解法 遍历 算法 定义 str dinic 网络 不能
原文地址:https://www.cnblogs.com/tian-luo/p/9526349.html