总结 - 网络流建图技巧

本文介绍了网络流问题中的上下界问题及一般技巧。对于无源汇上下界求有无可行流,可以通过附加源点和汇点求解;有源汇上下界求最大流和最小流则有不同的方法。此外,文章还探讨了如何利用图的有向性和时间顺序优化问题,以及在双向图、负权费用流、最小割和最小路径覆盖等问题中的策略。
摘要由CSDN通过智能技术生成

上下界问题

无源汇上下界求有无可行流

另取两个附加汇点xx,附件源点yy.

u->v限制 [ L , R ] [L,R] [L,R] <=> add_edge(u,xx,L),add_edge(yy,v,L),add_edge(u,v,R-L)

最后只需跑一遍 max_flow(yy,xx)检验与yy相连接的边是否满流即可

有源汇上下界求有无可行流时,只需在无源基础上加上 add_edge(t,s,INF)

有源汇上下界求最大流

第一种

  • 连上t->s流量为inf的边,求一次附加源到附加汇的最大流
  • 在残量网络上求一次s到t的最大流
  • 最后答案就是第二次求出的最大流(因为第一次求出的最大流是t->s的流量,而这个流量在他的反向边s->t中出现,所以不需要另外加上)
  • 为什么这样做呢?
  • 依然感性的理解,第一次求出的(附加源到附加汇的)最大流是为了满足down尽可能流满,然而此时s->t上可能还有可行的流,我们在残量网络上继续来求最大流,可以使得最后求出的流既满足≥down的限制,且最大。

第二种更易理解

就是将res = t->s流量,将最后一条边删除或cap赋值为零。加上跑一遍s->t的最大流。

有源汇上下界求最小流时
  • 先不要连接t->s流量为inf的边,求一次最大流
  • 再连上t->s流量为inf的边,在残量网络上求一次最大流
  • 为什么这样做呢?
  • 感性的来理解,第一步中求最大流,所有能流的边都“竭尽全力”的流完了;
    第二步再求最大流的时候,t->s上的流量就会尽可能的小(即s->t的流量尽可能小)

一般技巧

  1. 如果一个点的经过有时间的先后顺序,那么我们可以利用图的有向性,和时间的有向性,来将其结合起来,将其扩大时间的点数。

  2. 在已给了一些匹配后,需要我们根据一给出的图给出最少修改次数,此时,就需要我们对原来一些匹配给出优化,就是在相同情况下给出优待,那么怎么给呢,将图的权值扩充为原来最多点数的倍数,而以给出的匹配,我们就在额外将其权值加一,此时,最后得到的最大匹配和再最总点数取余即可得到原来的边数,而将总期望数除以总点数取整,就原有的值。

  3. 双向图时,可以少建反边。

  4. 在求含有负权的费用流中,如果不计流量求最小费用,那么我们需要加一条边add_edge(s,t,INF,0)这样就跑出的费用一定是最小的。

  5. 需要把一块图拆成两块区域,即求最小割,也就是最大流。

  6. 一般图遇到最小路径覆盖时,需要将其拆成二分图也就是这样,跑一边最大流

    二分图最小路径覆盖 = 总点数-最大匹配数

    V 1 = { x 0 , x 1 , . . . x n } ∪ { y 0 , y 1 , .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值