zoukankan      html  css  js  c++  java
  • 网络流专题总结

     好难啊

    I 最大流

    其实裸的最大流还是很少的,一般需要结合一些其他知识

    通常需要进行拆点

    $「HNOI2007」紧急疏散evacuate$

    我们发现能否撤离显然满足单调性

    二分撤离时间,关键是怎么$check$

    发现最麻烦的就是每个门同一时刻只能通过一个人

    考虑拆点,把一扇门拆成各个时刻的门,并向汇点i连流量为一的边就好了

    只需要判断最大流是否等于人数就好了

    当然也可以直接枚举时间然后动态建边

     

    II 最小割

    最经常出现的知识点

    一般的,在某些边的选或不选有联系的情况下需要用到最小割

    还经常用到 最大值=全集-最小割

    建图方式:

    1,原图

    $海拔$

    仔细阅读题意后可以发现,点的高度只有$0/1$

    继续观察我们发现答案就是原图的一个最小割

    然而直接跑会$TLE$

    引入:对偶图

    把平面图的每一个封闭区域看成一个点,如果原图中两个封闭区域有交边就在新图中两个点之间连一条边,值得注意的是,整个平面图外面的区域也是“封闭区域”(即S和T两点)。这样得到一张新的图,就是我们说的对偶图

    而对于一张平面图来说,对偶图中的最短路即为原图中的最大流

    对于这题来说,相当与已经把平面图给出

    那么我们把每条边旋转90°就得到原图的对偶图了

    2,抽离题意,观察性质

     这方面大多数题都是最大权闭合子图

     最大权闭合子图:有 n 个物品, 每个物品有一个 val(整数), 并且每个物品有一个依赖集合, 即选择物品 x,x 所依赖的物品也要选,问权值和的最大值

     大多数情况下建图是长这样的

     

      变为

      

     

    $happiness$

    有依赖关系的最大值,看起来很像最大权闭合子图

    但是这题里并不是简单的选或不选哪个点,而是选择一个点的归属

    我们抛开最大权单独考虑最小割

    把$S,T$分别看作$A(文科)$和$B(理科)$

    1,$S$向每个点i连流量为$A[i]$的边,每个点向T连流量为B[i]的边

    2,新建点$a[i][j]$表示$i,j$同时选文的贡献

    3,连接$(a[i][j],i,inf),(a[i][j],j,inf),(S,a[i][j],A[i][j])$

    4,新建点b[i][j]表示i,j同时选理的贡献

    5,连接$(i,b[i][j],inf),(j,b[i][j],inf),(b[i][j],T,B[i][j])$

    跑最大流即可

    答案为全集-最大流

     

    $老C的方块$

    这题主要考察最小割中分层图的构建

    观察四种不合法情况

    发现是如下图中黑色和白色点不能共存,或者割掉红色的一个点

     

    拓展到整张图上

     我们发现红色的点相互没有干扰,而黑色和白色的格子对于周围的红格子无法共存

    考虑这样建图

    1,(S,黑格,花费) (白格,T,花费)

    2,(左红格,右红格,min(左红格花费,右红格花费))

    3,(黑格,左红格,inf) (右红格,白格,inf)

    变成了一个很裸的最小割模型

     

    $寿司餐厅$

    抽象题意发现是一个依赖模型

    又有正负边权,考虑最大权闭合子图

    考虑题中的限制关系

    1,选$[i,j]$,必须选$[i+1,j]$和$[i,j-1]$

    2,负贡献中的cx,可以直接让$b[i][i]$减去$a_{i}$

    3,负贡献中的$mx^{2}$,对于每个编号新建一个点,向所有编号为它的点连边

    然后按照最大权闭合子图跑就好了

     

    III 费用流

    就是网络流中的每条边带上费用

    把$bfs$改成$spfa$就好了

    主要难点在于抽象出费用流的模型以及分层图的构建

    $数字配对$

    主要难点在于构建分层图

    观察相除为一个质数这条要求,可以得到配对的两个数所含质因子个数奇偶性相反

    那么我们可以这样构建分层图

    1,对每个数分解指因数,个数为奇数的连边$(S,i,b[i],0)$,偶数连边$(i,T,b[i],0)$

    2,两层之间能配对的点由奇向偶连边$(i,j,inf,c[i] imes c[j])$

     

    $千钧一发$

    难点仍然在于构建分层图

    我们发现偶数之间满足第二个条件,奇数之间满足第一个条件

    这里证明一下两个奇数的平方和不可能是平方数

    $forall a,b(a,b为奇数)$

    设$a^{2}+b^{2}=T^{2}$

    因为$a^{2}+b^{2}$为偶数,所以$T^{2}$为偶数,所以T为偶数

    设$a=2n+1,b=2m+1,T=2p$

    $$a^{2}+b^{2}=4p^{2}$$

    $$(2n+1)^2+(2m+1)^2=4p^{2}$$

    $$4n^{2}+4n+1+4m^{2}+4m+1=4p{2}$$

    $$4(n^{2}+n+m^{2}+m)+2=4p^{2}$$

    $$n^{2}+n+m^{2}+m+frac{1}{2}=p^{2}$$

    $n^{2}+n+m^{2}+m+frac{1}{2}=p^{2}$肯定是不成立的

    那么我们直接按照奇偶分层,剩下的i就和上一题一样了

     

    $无限之环$

    咕咕咕

     

    IV 上下界网络流

    就是网络流中有的边不只有上界还有下界

     无源汇可行流:
      1,建立源汇$ss,tt$
      2,原图中的边 $(u,v,[l,r])$ 变成 $(u,v,r-l)$
      3,统计$in[i]$代表入边的下界和,$out[i]$代表出边下界和
      4,若 $in[i]>out[i]$, 连边$ (ss,i,in[i]-out[i])$,否则建边 $(i,tt,out[i]-in[i])$
      跑最大流, 若满流, 则得到一组可行解, 否则无解

      其中每条边在原图中流量为下界+反向边流量

     有源汇可行流:

      在无源汇基础上新建$(t,s,inf)$就好了

      得到的可行流为$(t,s,inf)$反向边的流量

     源汇最大流:

      拆掉$ss$和$tt$的所有边和$(t,s,inf)$,跑$s->t$最大流

      答案为可行流+最大流

     源汇最小流:

      拆掉$ss$和$tt$的所有边和$(t,s,inf)$,跑$t->s$最大流

     

      答案为可行流-最大流

      有源汇费用流:

      基础答案加上下界$ imes$ 费用,其他一样

    $矩阵$

    首先我们发现这题的答案满足单调性

    考虑二分,现在的问题是能否满足当前二分的答案mid

    现在的要求是每行每列的总和不能>mid或<-mid

    考虑如下建图

    1,每行向每列连下界为L上界为R的边

    2,起点向每行连下界为$(sum limits_{j=1}^{m}a[i][j])-mid$,上界为$(sumlimits_{j=1}^{m}a[i][j])+mid$的边

    3,每列向终点连下界为$(sumlimits_{i=1}^{n}a[i][j])-mid$,上界为$(sumlimits_{i=1}^{n}a[i][j])+mid$的边

     

     

  • 相关阅读:
    进度条
    html5 表单新增事件
    html5 表单的新增type属性
    html5 表单的新增元素
    html5 语义化标签
    jq 手风琴案例
    codeforces 702D D. Road to Post Office(数学)
    codeforces 702C C. Cellular Network(水题)
    codeforces 702B B. Powers of Two(水题)
    codeforces 702A A. Maximum Increase(水题)
  • 原文地址:https://www.cnblogs.com/mikufun-hzoi-cpp/p/12019315.html
Copyright © 2011-2022 走看看