容易发现,在一轮增广后,由于一些 $(i,j)$ 边在增广路上,残量网络上会相应多出一些 $(j,i)$ 边,且一定会满足 $d'_i+(w(i,j)+h_i-h_j)=d'_j$(否则 $(i,j)$ 边就不会在增广路上了)。稍作变形后可以得到 $w(j,i)+(h_j+d'_j)-(h_i+d'_i)=0$。因此新增的边的边权非负。
-而对于原有的边,在增广前,$d_'i+(w(i,j)+h_i-h_j) \geq 0$,因此 $w(i,j)+(d'_i+h_i)-(d'_j+h_j) \geq 0$,用 $h_i+d'_i$ 作为新势能并不会使 $(i,j)$ 的边权变为负。
+而对于原有的边,在增广前,$d'_i+(w(i,j)+h_i-h_j) \geq 0$,因此 $w(i,j)+(d'_i+h_i)-(d'_j+h_j) \geq 0$,用 $h_i+d'_i$ 作为新势能并不会使 $(i,j)$ 的边权变为负。
综上,增广后所有边的边权均非负,使用 Dijkstra 算法可以正确求出图上的最短路。
printf("%d %d\n", maxf, minc);
return 0;
}
+ ```
## 习题