我們普通的網路流題中每條邊有乙個容量,或者是說每條邊實際流量在[0,容量]之間
帶上下界的網路流意思就是說每條邊有乙個最小流量和乙個最大流量
問題大概分為三種
1.無源匯帶上下界可行流
假設一條邊是u-->v的[lower, upper],我們可以把這條邊拆成兩條,一條邊必須流過[0, lower]的流量,另一條邊可以流過[0, upper-lower]的流量。對於後者,我們發現這是普通網路流問題中的邊,可以直接從u-->v連線容量為upper-lower的邊。對於前者,我們可以建立乙個炒雞源src和乙個炒雞匯dest,那麼這條邊就欽定了u要流走lower的流量,v要流進lower的流量,那麼我們可以從src到v連線乙個容量為lower的邊,從u到dest連線乙個容量為lower的邊。最後對轉化的圖從src到dest跑一遍最大流,檢查所有src的出邊是否跑滿即可。我們一般叫這個為可行流。如果都跑滿了,說明所有邊都符合最小流量,那麼存在合法的流量。否則就不存在。輸出方案:對於每條邊,我們輸出可行流中的流量再加上最小流量即可。注意到邊對於每乙個點的貢獻是可以累加的,我們可以一開始開乙個陣列統計每個點欽定流進/流出多少流量,最後統一建邊即可。
有源匯帶上下界最大流
假設原圖中源點是s,匯點是t,我們可以通過新建乙個炒雞源src和乙個炒雞匯dest(和原圖中的源匯不同),在原圖的基礎上,從t到s連一條[0, +inf]的邊(因為源點的流入量是無限的,匯點的流出量是無限的),然後再跑無源匯的可行流即可判斷是否可行。
如果可行,我們得到的是乙個可行流,我們在可行流的基礎上再從原圖的s到原圖的t跑乙個最大流即可。
有源匯帶上下界最小流
在有源匯帶上下界最大流的基礎上,由於我們需要求最小流,所以我們需要從t到s盡量地退流,所以我們跑從原圖中的t到原圖中的s的最大流(刪去新加的t到s的邊),再用可行流中新加的t到s的那個邊的殘量減去跑得的最大流即可。
注意答案可能存在負數(可以理解為我們跑的是從t到s的最大流,如果存在從t到s的流量的話一定會增廣的),所以要和0取max
上下界網路流總結
orz zhhx orz yyb orz aysn 無源匯可行流 每條邊取 l i 最大流調整 有源匯可行流 e t,s,inf 無源匯可行流 有源匯最小流 有源匯可行流 去掉 inf 邊 t rightarrow s 最大流 有源匯最大流 有源匯可行流 去掉 inf 邊 s rightarrow ...
有上下界的網路流總結
參考大佬的部落格 1.無源匯的可行流 可行流演算法的核心是將乙個不滿足流量守恆的初始流調整成滿足流量守恆的流。建圖方法 b u,i 為從u到i的下界,f為實際流 求解 在新圖上跑ss到tt的最大流 如果附加邊滿流就說明可行,如何說明是附加邊滿流 即如果最大流的大小等於ss出發的所有邊的流量上限之和 ...
上下界網路流初探
看文章各種不明真相.請教了一下iwtwiioi大牛.大致有個理解.建模過程 1.拆邊.對於每一條給出的有向邊 u,v,c,d 其中c指下界,d指上界,那麼在實際的圖中連三條只有上界沒有下界的邊 s,v,c u,t,c u,v,d c 其中s是超級源,t是超級匯.不同於題目給出的源與匯 一條是超級源連...