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

    推荐blog:

    https://www.mina.moe/archives/6256

    https://www.cnblogs.com/Eleven-Qian-Shan/p/13274900.html

    首先介绍网络流是什么,有什么用处

    你可以感性的理解:将网络流看作水流,将自来水公司看作源点,你家看作汇点,从自来水公司到你家有很多管子,每个管子都有所限制的的流量,流过的水的量不能超过管子所能流的最大量,现在问从自来水公司到你家的水流量最大是多少,这就是最大网络流

    这个问题如何解决呢,有如下算法

    dinic

    最坏情况的复杂度为O(n^2*m),所以可以在数据范围不大时放心地使用。

    如何操作呢?

    例如,这样一张简单图:

    如果将1看作源点,5看作汇点,进行dfs,我们得到一个这样的路径,1->2->3->4->5,将遍历过的边减去这条路径所能流的最大流,图就变成这样了:

     

    然而,再进行dfs,我们并不能再搜到一条新的路径,所以最大流是1,然而,这张图的最大流应该为2,这怎么办呢?

    我们可以将刚刚dfs的边所用的流量反过来,以便于再次反悔,就像这样

    这时再从1号节点dfs可以搜到一条1->3->2->4->5流量为1的路径,再反向,再dfs我们就再也找不到可以从1到5的路了,但是我们可以发现再次反向后的3->2这一条边又变回了原来的老样子,这就是为什么我们要反边

    优化:

    1、先bfs记录每个点的深度,dfs时只能由深度浅的到深的

    2、当前弧优化,即若x点对应的head[x]边,流量已用完,就将head[x]改为链接表指向的下一条边,这样之前那条边就会被跳过

    推荐题:luoguP3376

    ISAP

    见blog:https://www.cnblogs.com/owenyu/p/6852664.html

  • 相关阅读:
    周末总结
    大数据开源框架技术汇总
    oracle迁移mysql总结
    梯度下降
    BFC的概念
    元素类型
    window10安装tensorflow
    学习使用git
    设计模式中的关系
    拟合圆
  • 原文地址:https://www.cnblogs.com/Jessica-Cao/p/13532996.html
Copyright © 2011-2022 走看看