zoukankan      html  css  js  c++  java
  • 网络流

    网络流


    无源汇有上下界可行流

    模型:一个网络,求出一个流,使得每条边的流量必须>=Li且<=Hi,
    每个点必须满足总流入量=总流出量(流量守恒)(这个流的特点是循环往复,无始无终)
    所以要将一个不满足流量守恒的初始流调整成满足流量守恒的流.
    >流量守恒,即每个点的总流入量=总流出量
    如果存在一个可行流,那么一定满足每条边的流量都大于等于流量的下限.
    因此我们可以令每条边的流量等于流量下限,得到一个初始流,然后建出这个流的残量网络.
    (即:每条边的流量等于这条边的流量上限与流量下限之差)这个初始流不一定满足流量守恒,因此最终的可行流一定是在这个初始流的基础上增大了一些边的流量使得所有点满足流量守恒.
    考虑在残量网络上求出一个另不满足流量守恒的附加流,使得这个附加流和我们的初始流合并之后满足流量守恒.即:


    如果某个点在所有边流量等于下界的初始流中满足流量守恒,那么这个点在附加流中也满足流量守恒,


    如果某个点在初始流中的流入量比流出量多x,那么这个点在附加流中的流出量比流入量多x.


    如果某个点在初始流中的流入量比流出量少x,那么这个点在附加流中的流出量比流入量少x.
    >开一个数组A[],A[i]表示i在初始流中的流入量-流出量的值,那么A[i]的正负表示流入量和流出量的大小关系,下面就用A[i]表示初始流中i的流入量-流出量
    dinic算法能够求的是满足流量守恒的有源汇最大流,
    不能在原网络上直接求一个这样的无源汇且不满足流量守恒的附加流.
    显然附加流是不满足流量守恒的
    如果一个点i在原网络上的附加流中需要满足流入量>流出量(初始流中流入量<流出量,A[i]<0),那么我们需要给多的流入量找一个去处,因此我们建一条从i出发流量=-A[i]的 边.如果A[i]>0,也就是我们需要让附加流中的流出量>流入量,我们需要让多的流出量有一个来路,因此我们建一条指向i的流量=A[i]的边.
    新建一个虚拟源点ss和一个虚拟汇点tt新建的指向i的边都从ss出发,从i出发的边都指向tt.一个点要么有一条边指向tt,要么有一条边来自ss
    指向tt的边的总流量上限一定等于ss流出的边的总流量上限,因为每一条边对两个点的A[i]贡献一正一负大小相等,
    所以全部点的A[i]之和等于0,即小于0的A[i]之和的绝对值=大于0的A[i]之和的绝对值,找到一个流满足新加的边都满流,这个流在原图上的部分就是我们需要的附加流
    怎样找出一个新加的边都满流的流呢?
    这样的流就是建出的图的ss-tt的最大流。
    所以跑ss到tt的最大流即可.如果最大流的大小等于ss出发的所有边的流量上限之和(此时指向tt的边也一定满流,因为这两部分边的流量上限之和相等).
    最后,每条边在可行流中的流量=容量下界+附加流中它的流量(即跑完dinic之后所加反向边的权值).

    有源汇上下界最大流

       对于流量有上下界的有源汇网络,原图中存在源点S和汇点T,为了求可行流,先将其转换为无源汇网络。 
    

    从T-->S引入一条边,其流量上下界为[0, INF],此时原图变为了无源汇网络,然后按照无源汇网络求解可行流的方法来求解。

    路径覆盖

    DAG图最小路径覆盖
    最小不相交路径覆:

    把原图的每个点V拆成(VxVx和VyVy)两个点,如果有一条有向边A->B,那么就加边(Ax−>ByAx−>By)。这样就得到了一个二分图。那么最小路径覆盖=原图的结点数-新图的最大匹配数。

    证明:
    

    一开始每个点都是独立的为一条路径,总共有n条不相交路径。我们每次在二分图里找一条匹配边就相当于把两条路径合成了一条路径,也就相当于路径数减少了1。所以找到了几条匹配边,路径数就减少了多少。所以有最小路径覆盖=原图的结点数-新图的最大匹配数。

    最小可相交路径覆盖:
    

    floyed求出传递闭包后建二分图,就变成了最小不想交路径

    为了连通两个点,某条路径可能经过其它路径的中间点。比如1->3->4,2->4->5。但是如果两个点a和b是连通的,只不过中间需要经过其它的点,那么可以在这两个点之间加边,那么a就可以直达b,不必经过中点的,那么就转化成了最小不相交路径覆盖。
    法2:拆点限流,上下界[1,1],源点向每个点练边,每个点向汇点练边,那么最小流就是答案

    ps:每条增广为一条覆盖链
    

    Dilworth定理

    对于DAG:x可达y是一个偏序关系,否则不是

    偏序:

    1.自反性
    2.反对称性
    3.传递性

    定理1,

    ((X,leq))是一个有限偏序集,并令r是其最大链的大小。则X可以被划分成r个但不能再少的反链。
    其对偶定理称为Dilworth定理:
    定理2)
    ((X,leq))是一个有限偏序集,并令m是反链的最大的大小。则X可以被划分成m个但不能再少的链。

    即:

    链的最少划分数 = 反链的最长长度

    状态分层

    把每种分层建图----->有时间ixnazhi-------->按时间分层
    例题:

    最大权闭合子图

    hall定理

  • 相关阅读:
    tensorflow入门
    【CentOS】yum安装教训
    【转载】Linux的五个查找命令
    【git】本地git bash连接远程库github
    【python学习】字符串相关
    【Linux】单计算机安装PBS系统(Torque)与运维
    xshell上windows和linux互传文件命令
    【Linux】Linux命令行下多任务前后台切换
    【python】windows更改jupyter notebook(ipython)的默认打开工作路径
    【Introduction】R语言入门关键小结
  • 原文地址:https://www.cnblogs.com/sssy/p/8259681.html
Copyright © 2011-2022 走看看