上下界网络流学习小记
2016-02-25 19:03
363 查看
写在前面
网络流是信息学竞赛中几乎必考的一个模型。而上下界网络流也是网络流问题中的一个大类,出题很灵活。今年冬天第一次接触上下界之后果断滚粗,于是便恶补了一下上下界,大体有两种方法。
可行流
首先建立超级源和超级汇,ss,tt。然后把每条边拆成三条边,对于每条u->v,上界为up,下界为low的边,从ss向v连容量为low的边,从u向tt连容量为low的边,再从u向v连容量为up-low的边。若有源汇则从T向S连容量为+∞的边。证明可以感性理解,因为每条边必须要流low的流量,于是我们就从ss开始强制流low,通过T回到S,再回到tt,从而保证强制性和流量守恒。判断是否可行就相当于判断从ss流出去的边是否都流满就可以了。最小费用可行流
可以在可行流的方法上,在从ss到v的边和从u到v的边加上费用c即可。感性理解理解。也可以把每一条必流的边上的费用减去一个inf,最后答案加回。注意流量守恒。(表示这个方法我也没怎么理解)
最大流
二分一个x,在可行流的基础上,把从T到S的边的下界变为x,然后判断是否存在可行流,最大的x即为所求。也可以先求一遍从ss到tt的最大流,设为tmp1,然后删去所有和ss、tt有关的边,再求一遍从S到T的最大流(貌似T到S的边不用删?),设为tmp2,答案即为tmp1+tmp2?
感性理解可以认为第一次流是为了满足下界,第二次便是尽可能去流,加起来即为最大流。
最小流
这东西只会在上下界网络流中出现。同样二分,把从T到S的边的上界变为x,下界为0。
也可以不加T到S的边,求ss到tt的最大流,然后再把这条边加上,再求ss到tt的最大流,这时这条边上的流量即为最小流。(不要问为什么)
参考资料:WerKeyTom_FTD的博客
%%%
例题
供电网络支线剧情
相关文章推荐
- SDN软件定义网络
- iOS网络编程—NSURLSession的简单使用(iOS9)
- Node:Q与node http模块搭配
- Charles抓Https的包
- 详细介绍Ubuntu网络配置方法
- AS3 通过 TCP/IP 协议控制WatchOut播放
- Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
- socket客户端用例测试-HTTP
- Android APP架构的那点事儿[网络模块]
- 移动网络广告优化(速度优化篇)
- android AsyncHttp的简单使用与封装
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- Java 网络编程(四) InetAddress类
- 在mac上开启httpServer服务
- 从TCP协议的原理来谈谈rst复位攻击
- HTTP method POST is not supported by this URL
- CocoaAsyncSocket 网络通信使用之Protobuf安装(五)
- 编译安装http启动问题
- 深入理解Hadoop集群和网络
- 深入浅出Cocoa之Bonjour网络编程