背景
自从Sanhai研究了流量网络上次,访问的人越来越多, 于是Sanhai研究了更高级的网络
在 Sanhai 的全球分层供需网络中:
- 节点可能是数据生产者(数据中心)、消费者(用户终端)、或中转枢纽;
- 链路可能是光纤、卫星、跨洋电缆或虚拟专线,每条链路都有容量上限与单位费用;
- 费用可能为负,表示存在补贴机制,但保证无负环。
此外,每个节点 v 有一个净需求值 bv:
- bv>0:该节点至少需要 bv 单位数据;
- bv<0:该节点必须输出 ∣bv∣ 单位数据;
- bv=0:该节点仅作为中转。
系统要求:
- 必须找到一条可行流,满足所有节点的净需求约束;
- 在所有可行流中,总费用最小;
- 若无解,输出
-1。
数学建模
决策变量
对每条边 (u,v) 定义流量变量:
f(u,v)≥0
约束条件
- 容量约束
$$0 \leq f(u,v) \leq cap(u,v), \quad \forall (u,v) \in E
$$
- 流量守恒约束
对每个节点 v:
$$\sum_{(u,v)\in E} f(u,v) - \sum_{(v,w)\in E} f(v,w) = b_v
$$
- 供需平衡
v=1∑nbv=0
目标函数
最小化总费用:
min(u,v)∈E∑f(u,v)⋅cost(u,v)

输入格式
n m
u1 v1 cap1 cost1
...
um vm capm costm
b1 b2 ... bn
- 第一行:
- n —— 节点数(1≤n≤500)
- m —— 有向边数(0≤m≤104)
- 接下来 m 行:每行四个整数
- ui,vi —— 边的起点和终点
- capi —— 容量(0≤capi≤109)
- costi —— 单位费用(−104≤costi≤104)
- 最后一行:n 个整数,表示每个节点的净需求 bv
- ∑bv=0 保证供需平衡
输出格式
minCost
样例输入
6 8
1 2 5 2
1 3 3 -1
2 4 4 3
2 5 2 2
3 5 3 4
4 6 3 1
5 6 4 2
3 4 2 0
-5 0 0 2 1 2
样例输出
13
数据范围
- 1≤n≤500
- 0≤m≤104
- 容量范围:0≤cap≤109
- 费用范围:−104≤cost≤104
- 节点净需求 bv 的绝对值不超过 109,并且 ∑bv=0
- 保证无负环