偶然在知乎上看到的一篇文章中提到了用动态树优化Dinic的思路,遂记录此随笔方便之后学习。
Dinic算法是一个非常优秀的解决网络流模型的算法,然而时间复杂度上界是O(V2E),有可能会被毒瘤出题人卡掉。
使用LCT可以优化Dinic算法来达到优秀的O(VElogV)的复杂度上界。
我们只需要实现4个操作就可以实现快速增广了。
1、加边:每次增广时加边直到源汇点在一颗树内
2、寻找路径最小值:找到增广路后寻找增广路上余量最小的边
3、路径修改:将增广路上的边全部减少增广的流量
4、删边:删去余量为零的边
以上四个操作用LCT化边为点即可完成。