网络流

【最小割输出方案】 残量网络DFS,跑出S能到达的点集A,割=(A,V-A)

【最小费用任意流】(最大类似) 增广路的费用>=0时停止增广。

顶点限流】 拆点

【费用分段递 拆边

 

【最小点割集】

  图G中 删去一些点使得  '这些点的权值和最小' 且满足 '从点S走不到点T'。

  将G中每个点v   拆成v1,v2  add(v1,v2,val[v]);

  对于G中每条有向边(u,v)  add(u2,v1,inf); (无向就add无向边)

  源是S2 汇是T1  求最小割、

  割边e(v1,v2),就是意味点v是要删去的点(当然 方案数不唯一)

 

【最大权闭合子图】

  图G中 若u->v,则选了u必须选v, add(u,v,inf)

  对于w(u)>0的,add(S,u,w(u));  对于w(u)<0的,add(u,T,-w(u));

  Ans=(正权和) - (S->T的最小割)

 

【上下界网络流】

  1. 无源汇可行流 (也叫可行循环流)  判是否可行

    新建 s0,t0,判断每个点v的(入边的下界和-出边的下界和=w ,大于0,则s0向v连w的边,小于0,则v向t0连-w的边。  然后跑s0->t0最大流,满流则可行

  2. 有源汇最大流

    原图的T向S连 上界inf 下界0的边。然后先当成无源汇可行流那样做……跑出可行流之后,存下S->T这条边的流量,然后删掉S-T这条边,删除s0,t0。再跑S->T的最大流,加上之前存下的S->T的流量

  3. 有源汇最小流

    反例在这个博客里有。https://www.cnblogs.com/kane0526/archive/2013/04/05/3001108.html 

    先不加T向S的inf边,直接按无源汇可行流的方法跑s0->t0的最大流。再加T向S的inf边,继续跑s0->t0的最大流。最后的T->S的流量就是可行最小流。

    先不加T向S的inf边,是为了将原图中的循环流尽可能利用上,分担T->S这条inf边的流量。这样就能得到最小流了。

 

【区间K覆盖】

  指 在区间[1,n] 中 选择 若干个有价值的区间[l,r],要求重叠的区间不超过K层,最大化价值

  转换成网络流就是,把每个区间当成流,要求最大流=最小割<=K

  建模:  S -> 1 -> 2 -> 3 -> ... -> n -> T  ,其中每条边 流量为K,费用为0

    然后对于每一个区间 [l,r] ,add(l,r,1,-val)   跑费用流即可。

  1、如果要求重叠在每个点上的不超过K层, 拆点即可

  2、如果要求整个区间的n-1个段 分别被恰好覆盖ai层,可以将对应的 i -> i+1 边 流量改为 上下界都为K-ai (这里的K取 max(ai)即可 。)

转载于:https://www.cnblogs.com/cyz666/p/6391453.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值