LOJ116 有源匯有上下界最大流(模板題)

2022-05-14 14:24:47 字數 1258 閱讀 6085

點此看題面

大致題意:給你每條邊的流量上下界,讓你先判斷是否存在可行流。若存在,則輸出最大流。

在做此題之前,最好先去看看這道題目:【loj115】無源匯有上下界可行流。

首先,我們先跑一遍無源匯上下界可行流,同時判斷是否有解。

等會兒,這題是有源匯的,而剛才提到的可行流是無源匯的,怎麼辦?

答:沒關係!

直接從匯點向源點連一條下界為\(0\)、上界為\(inf\)的邊,然後再按無源匯上下界可行流的套路建虛擬源匯做即可。

但還有個問題,這樣跑出來的肯定不是最大流,那該怎麼辦?

我們只需在跑完可行流之後的圖上再跑遍最大流,就可求出答案了。

#include#define tp template#define ts template#define reg register

#define ri reg int

#define con const

#define ci con int&

#define i inline

#define w while

#define n 202

#define m 9999

#define min(x,y) ((x)<(y)?(x):(y))

#define inf 1e9

using namespace std;

int n,m,s,t;

class fastio

tp i void read(ty& x)

ts i void read(ty& x,ar&... y)

}f;class upperlowermaxflow_with_st//有源匯有上下界最大流

e[lsz+5];

i bool bfs(ci s,ci t)//bfs找增廣路

i int dfs(ci x,ri f,ci t)//dfs統計流量

return !res&&(dep[x]=-1),res;

} i bool feasibleflow()//無源匯有上下界可行流

public:

int s,t;i upperlowermaxflow_with_st() i int p(ci x)

i void add(ci x,ci y,ci lower,ci upper)

i void maxflow(ci s,ci t)//最大流

}v;int main()

LOJ 116 有源匯上下界最大流

有源匯上下界最大流 模板題。具體講解見 sap演算法或dinic演算法跑出來的是殘量網路上,還能增加多少流量!s t 的最大流解法 建立附加源匯ss,tt。建法詳見上面的博文 並建邊t s,容量為正無窮。跑一遍ss tt最大流,若等於附加出邊容量和,即滿足下界滿流,則繼續求最大流,否則此題無解 無最...

有源匯有上下界最大流詳解(loj116)

例題鏈結 首先吐槽一下放題人 我不知道是不是我理解錯了什麼。題目描述裡就乙個上下界然後就說要求最大流。直接建上界然後跑最大流不就完了麼?實際上原題是這樣的 求出乙個流使得源點的總流出量等於匯點的總流入量,其他的點滿足流量守恆,而且每條邊的流量滿足上界和下界限制。在這些前提下要求總流量最大。沒學過無源...

Loj 116 模板 有源匯有上下界最大流

n nn個點m mm條邊的一張圖,每條邊有流量上下限制,求源點到匯點的最大流。先別急著求上面那個,考慮一下怎麼求無源點匯點的上下界可行流。可以考慮先把下限流滿,這樣就會出現有的點流量不均衡的問題,考慮每個點除了下限以外還有附加流量,這些附加流量會最多佔能每條邊r l r lr l這麼多的流量,可以先...