SGU 194 無源無匯可行流求解

2022-05-04 10:18:08 字數 907 閱讀 4314

題意:n個點,m條邊,每條邊有容量限制 l--c,每個點滿足容量平衡(流入等於流出),求可行解

無源無匯可行流問題,建立以乙個超級源點和超級匯點,由於原來最大流問題時候,流量下界其實為0,

所以要轉化,把邊(設u-->v)的容量改為c-l,但是這樣不平衡了,所以s流入v點l,u點流出到t要l,這樣

保證了u,v流量平衡,用陣列sumin[i]記錄下i點流入下限之和,最後超級源點流入i。

最後求一次s-->t的最大流(走一遍dinic),如果新增的邊都滿流,說明有解(此時每條邊所用流量+下限即可),

反之無解(必需要滿流,否則不遵循流量平衡條件!)。(無源無匯模型和參考黑書

p366)。

#include//15ms

#include#include#includeusing namespace std;

int n,m;const int inf=0x3f3f3f3f;

int e[90000][5];int head[210]; //鏈前星存邊,0:to,1:pre,2,殘量;3:l(下界);4,c

int sum_in[210];int sum_out[210]; //點i流入之和,流出之和

int vis[210];int level[210];

bool bfs() //dinic,小心細節!要熟練}}

return vis[n+1];

}int dfs(int u,int minf)

int sumf=0,f;

for(int i=head[u];i!=-1&&minf;i=e[i][1])

{ int v=e[i][0];

if(level[v]==level[u]+1&&e[i][2]>0)

{f=dfs(v,minf

無源匯有上下界可行流

來自loj的模板題 我們可以依照以下幾個步驟來解決這個問題。1.讓所有的邊都流下界數量的水 2.計算每個點流入的水量 流出的水量d x d x d x 3.建超級源點s ss和超級匯點t tt4.對於每個點,若d x 0d x 0 d x 0則連邊s,x d x s,x,d x 如果d x 0d x...

無源匯可行流 模板LOJ 115

自個設個源點s,匯點t,每個點 du i 入度 出度。du i 0時 加邊s i,邊權為du i du i 0時 加邊i t,邊權為 du i 設sum為所有 0的du i 的和 求s t的最大流,如果maxflow sum,則存在可行流,此時每條邊流掉的流量 它原本的下界就是實際的流量 dfs過程...

上下界網路流建模方法 無源無匯可行流 最大 最小流

學習了sev eral several severa l天。實義數量必須markdown 因為有下界,考慮不要下界。每個弧的 可調控範圍 的大小是upi dow ni up i down i upi d owni 那麼在我們的實際的圖中,所有弧的下界都是0 00,每條原圖對應的弧的上界是upi do...