LOJ116 有源匯有上下界最大流(上下界網路流)

2022-05-22 00:48:10 字數 1301 閱讀 4912

考慮有源匯上下界可行流:由匯向源連inf邊,那麼變成無源匯圖,按上題做法跑出可行流。此時該inf邊的流量即為原圖中該可行流的流量。因為可以假裝把加上去的那些邊的流量放回原圖。

此時再從原來的源向原來的匯跑最大流。超源超匯相關的邊已經流滿不會再退流,則下界可以滿足,並且在此基礎上增廣是可以保證原圖的流量平衡的。求出的最大流即為原圖最大流。因為顯然原圖最大流=可行流流量+原圖新增流量,而可行流流量等於匯到源流量,這部分在跑最大流的時候被退流並計入答案。

#include#include

#include

#include

#include

#include

using

namespace

std;

intread()

while (c>='

0'&&c<='

9') x=(x<<1)+(x<<3)+(c^48),c=getchar();

return x*f;

}#define n 210

#define m 50000

#define s 0

#define t 201

#define inf 1000000000

int n,m,w,v,t=-1,p[n],degree[n],l[m],tot=0

;int cur[n],d[n],q[n],ans=0

;struct dataedge[m];

void addedge(int x,int y,int

z)bool bfs(int s,int

t) }

while (headreturn ~d[t];

}int work(int k,int f,int

t)

if (used==0) d[k]=-1

;

return

used;

}void dinic(int s,intt)}

intmain()

for (int i=1;i<=n;i++)

if (degree[i]>0) addedge(s,i,degree[i]),tot+=degree[i];

else

if (degree[i]<0) addedge(i,t,-degree[i]);

addedge(v,w,inf);

dinic(s,t);

if (ans"

please go home to sleep";

else ans=0,dinic(w,v),cout

}

LOJ 116 有源匯上下界最大流

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

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

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

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

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