网络流
Dinic🧀
int🧀
double🧀
mcmf🧀
spfa🧀
dijk+原始对偶🧀
spfa初始化+dijk+原始对偶🧀
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | |
one flow fits all究极轮椅版🧀
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | |
有源汇/无源汇上下界可行流🧀
可转化为最大流问题。
建图时添加源点 \(SS\) ,汇点 \(TT\) 。
连边方法:
- 对于原图中存在的边
{u,v,l,r},连{u,v,r-l}。 - 对于原图中每一个点 ,令
d[u]代表u点的所有入边的流量下界减去出边的流量下界。 - 如果
d[u]<0,连边{u,TT,-d[u]}。 - 如果
d[u]>0,连边{SS,u,d[u]}。 - 对于有源汇问题,连边
{T,S,inf,0}。在后文中,这条边被简称为inf边。(注意:这里的 \(S\) ,\(T\) 是原图源汇点,而非新增的附加源汇点。)
如果图中所有与 \(SS\) 相连的边均满流,则表明存在可行流,每条边具体流量为该边流量下界加上其在新图中对应边的流量。
有源汇上下界最大流/最小流🧀
先跑一遍可行流。如果存在可行流,记录答案 ans1,大小为 inf 边实际流量。
最大流🧀
在可行流基础上,删除先前连接的 inf 边,以原图源汇点(不是附加源汇点)为新的源汇再跑一遍最大流,记录答案 ans2 。
最终答案为 ans1 + ans2 。
最小流🧀
在可行流基础上,删除先前连接的 inf 边,以原图源点(不是附加源点)为新汇点,以原图汇点(不是附加汇点)为新源点再跑一遍最大流,记录答案 ans2 。
最终答案为 ans1 - ans2 。
有源汇/无源汇上下界最小费用可行流🧀
可转化为费用流问题。
建图时添加源点 \(SS\) ,汇点 \(TT\) 。
连边方法:
-
对于原图中存在的边
{u,v,l,r,c},连{u,v,r-l,c}。 -
对于原图中每一个点(包括源汇)\(u\) ,令
d[u]代表u点的所有入边的流量下界减去出边的流量下界。 - 如果
d[u]<0,连边{u,TT,-d[u],0}。 -
如果
d[u]>0,连边{SS,u,d[u],0}。 -
对于有源汇问题,连边
{T,S,inf,0}。(注意:这里的 \(S\) ,\(T\) 是原图源汇点,而非新增的附加源汇点。)
如果想要限制 \(S\) 到 \(T\) 的总流量不超过 \(f\) ,可以将这条边的流量改为 \(f\) 。
如果图中所有与 \(SS\) 相连的边均满流,则表明存在可行流,每条边具体流量为该边流量下界加上其在新图中对应边的流量。
最小总费用 \(=\) (新图 \(SS \to TT\) 跑出的最小费用) \(+\) \(\sum (l \times c)\)。