这个问题其实是能转化成无源汇有上下界最大流,在原图基础上加一条从t到s的无限容量的边,就能转化成循环流了。。
按无源汇有上下界最大流建图跑最大流判断能否达到下限的要求,此时整图应形成了循环流,而t到s的流量代表了从s到t的总流量(如果没有t到s的边的话)那么去掉t到s,还剩余一些自由流量,在原有流量的基础上再将自由流量跑满即可。。
从这题中窝萌需要学习到一个重要的结论:将有源网络流转变成循环流的方法就是给t到s加一条无限容量的边
/**
* ┏┓ ┏┓
* ┏┛┗━━━━━━━┛┗━━━┓
* ┃ ┃
* ┃ ━ ┃
* ┃ > < ┃
* ┃ ┃
* ┃... ⌒ ... ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃ Code is far away from bug with the animal protecting
* ┃ ┃ 神兽保佑,代码无bug
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
*/
#include
#include
#include
#include
#include
#include
#include
这是一道模板题。
n n n 个点,m m m 条边,每条边 e e e 有一个流量下界 lower(e) \text{lower}(e) lower(e) 和流量上界 upper(e) \text{upper}(e) upper(e),给定源点s s s 与汇点 t t t,求源点到汇点的最大流。
第一行两个正整数 n n n、m m m、s s s、t t t。
之后的 m m m 行,每行四个整数 s s s、t t t、lower \text{lower} lower、upper \text{upper} upper。
如果无解,输出一行 please go home to sleep
。
否则输出最大流。
10 15 9 10
9 1 17 18
9 2 12 13
9 3 11 12
1 5 3 4
1 6 6 7
1 7 7 8
2 5 9 10
2 6 2 3
2 7 0 1
3 5 3 4
3 6 1 2
3 7 6 7
5 10 16 17
6 10 10 11
7 10 14 15
43
1≤n≤202,1≤m≤9999 1 \leq n \leq 202, 1 \leq m \leq 99991≤n≤202,1≤m≤9999