有上下界網絡流學習筆記
有上下界網絡流學習筆記
1.有(無)源匯有上下界最小費用可行流:算法的核心思想是補流。先判斷原圖是否有源匯,若有則連邊\(t \to s(\infty/0)\);隨後新建超級源匯\(S\),\(T\);然後對於每一條邊\(x \to y\),連邊\(x \to y(high-low/w)\);接著對每一個點\(x\),計\(\delta\)為該點入邊流量下界之和減去該點出邊流量下界之和,如果\(\delta\)為正數,說明接下來有一部分流量要從\(x\)流出,則連邊\(S \to x(\delta/0)\);若\(\delta\)為負數,說明需要有一部分流量流入\(x\),則連邊\(x \to T(-\delta/0)\)
例1.Luogu4043 支線劇情
模板題,沒啥好說的。
2.無源匯有上下界可行流:算法的核心是先建出初始流,再通過補充附加流,滿足流量平衡(其實和1是一樣的)。建立附加源匯\(S\),\(T\),然後對於每一條邊\(x \to y\),連邊\(x \to y(high-low)\);接著對每一個點\(x\),計\(\delta\)為該點入邊流量下界之和減去該點出邊流量下界之和,如果\(\delta\)為正數,說明接下來有一部分流量要從\(x\)流出,則連邊\(S \to x(\delta)\);若\(\delta\)為負數,說明需要有一部分流量流入\(x\)
例2.ZOJ2314
仍然是模板題。
3.有源匯有上下界最小/最大流:連邊\(t \to s(\infty)\),先用2中所述方法求出可行流,然後刪去\(t \to s(\infty)\),從\(s\)到\(t\)在原來的殘量網絡上增廣即可得到最大流,因為這樣既不破壞流量平衡,又不會不符合上下界,同時最大化了流量;最小流有兩種做法:1.因為反向邊的流量增加就是正向邊的流量減小,最小流是正向邊流量最小化,所以\(s \to t\)
例3.BZOJ2502
還有一些練習題,等我寫了再貼在這吧。
有上下界網絡流學習筆記