無源匯有上下界可行流 loj模板

2021-10-23 20:25:52 字數 2458 閱讀 3121

loj模板題 思想是

,如果存

在可行流

,每條邊

必定至少

有下界的

流量

思想是,如果存在可行流,每條邊必定至少有下界的流量

思想是,如果

存在可行

流,每條

邊必定至

少有下界

的流量

那 麼直

接用下屆

填充邊的

流量

那麼直接用下屆填充邊的流量

那麼直接用下

屆填充邊

的流量

每 條邊

的流量就

變成了[

0,up

−dow

n]

每條邊的流量就變成了[0,up-down]

每條邊的流量

就變成了

[0,u

p−do

wn]

此 時有

一些點流

入的流量

大於流出

的流量,

記作in

[i

]<

0此時有一些點流入的流量大於流出的流量,記作in[i]<0

此時有一些點

流入的流

量大於流

出的流量

,記作i

n[i]

<0

有 一些

點流入的

流量小於

流出的流

量,記作

in[i

]>

0有一些點流入的流量小於流出的流量,記作in[i]>0

有一些點流入

的流量小

於流出的

流量,記

作in[

i]>0

對 於i

n[i]

<0的

點,流入

太多,那

麼給匯點

t對於in[i]<0的點,流入太多,那麼給匯點t

對於in[i

]<0的

點,流入

太多,那

麼給匯點

t 對 於i

n[i]

>0的

點,流出

太多,那

麼源點s

提供給它

對於in[i]>0的點,流出太多,那麼源點s提供給它

對於in[i

]>0的

點,流出

太多,那

麼源點s

提供給它這樣

一來,在

新圖上跑

最大流,

最大流會

填充in

[i]等

於0

這樣一來,在新圖上跑最大流,最大流會填充in[i]等於0

這樣一來,在

新圖上跑

最大流,

最大流會

填充in

[i]等

於0 這樣就

得到乙個

可行流,

邊的流量

是下界+

反向邊的

流量

這樣就得到乙個可行流,邊的流量是下界+反向邊的流量

這樣就得到一

個可行流

,邊的流

量是下界

+反向邊

的流量

#include using namespace std;

const int maxn=2e5+10;

const int inf=1e9;

struct edged[maxn]; int head[maxn],cnt=1;

void add(int u,int v,int flow),head[u]=cnt;

d[++cnt]=(edge),head[v]=cnt;

}int n,m,s,t;

int in[maxn],dis[maxn],up[maxn],down[maxn];

bool bfs()

} }return false;

}int dinic(int u,int flow)

} return flow-res;

}int main()

s=0,t=n+1;

int ans=0,sumn=0;

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

if( in[i]<0 ) add(i,t,-in[i] );//流入太多,給匯點

else add(s,i,in[i] ),sumn+=in[i];//流出太多,源點補充

while( bfs() ) ans+=dinic(s,inf);

puts( ans==sumn?"yes":"no");

if( ans!=sumn ) return 0;

for(int i=2; i<=m*2+1; i+=2)

cout << d[i^1].flow+down[i/2] << '\n';

}

無源匯有上下界可行流

來自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 無源匯有上下界可行流

參考部落格 模型 乙個網路,求出乙個流,使得每條邊的流量必須 li且 hi,每個點必須滿足總流入量 總流出量 流量守恆 這個流的特點是迴圈往復,無始無終 這個演算法是有上下界網路流演算法的基礎,只要深刻理解這個演算法其他演算法也就水到渠成,因此我用大篇幅力圖將這個演算法的思想和細節闡述清楚.可行流演...

LOJ 115 無源匯有上下界可行流

模板題 首先把下界去掉 連邊upper lower 然後記錄每個點至少要流出的和流入的流量 下界 然後流入大於流出的連向tt,流出大於流入的連向ss 補流 然後跑最大流,如果sum flow,就代表加上的邊滿流,有答案,否則沒有 include include include include inc...