Dinic算法+多路增广+当前弧优化+爆点

Dinic算法是最大流算法中比较常用的,效率也很高。

普通的Dinic,在原来的求增广路线的基础上添加了一个bfs(),用来分层,分层可以使用一个数组标记节点所在的层数,搜索增广路线时,严格按照节点层数递增的顺序搜索,这样可使得dfs()的深度最低,从而节省时间。 

当前弧优化:例如 中间节点A,有三个流向,A->B, A->C,A->D,在A点时, 如果A->B,A->C这两个边都已经满流,那么下次再经过A节点时,直接跳过A->B,A->C这两条边,直接访问A->C这个点,这个就是当前弧优化,实现方式,可开一个数组记录每个节点访问到第几条边(这个好像优化的效果不是很明显)。

多路增广:到达每一个节点,都尽可能的增广,直到增广到汇点。

爆点:一次分层,多次寻找增广路线,在一次寻找增广路线中,发现, 中间节点A,有三个流向,A->B, A->C,A->D,这个三个流向都满流了,那么这个节点就不能作为中间节点出现了,因为它的流向都已经作为增广路线,全部占满了。具体操作,存储层数的数据把这个节点的层数标记为负数。

刚学习最大流算法,代码还没有具体实现,先记录学习的成果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值