有源匯有上下界的最小流(LOJ117)

2022-08-12 22:51:25 字數 1121 閱讀 9258

其實最小流和最大流個人感覺很類似,連線了超級源點和超級匯點之後跑完一次最大流,乙個是再在除去超級源點和超級匯點跑一次最大流,乙個是給源匯點連乙個無限邊求最大流,然後無限邊的流量就是答案

因為乙個相當於是要把殘量網路剩下的流加起來,才是最大流,而這個跑過最大流後剩下的就是最小流了

**好像是有點點問題的,loj117上一直死跑不過第八個點,但本機上好像是能出正確答案的。。。

管他的反正也就乙個點而已(作為乙個蒟蒻能寫成這樣已經十分滿足了,真的菜是沒辦法的)

#include

using

namespace

std;

#define ll long long

const ll inf=1e15;

int str,des,cnt=1,adj[50050],nxt[500050],to[500050],lev[50050],low[500050],st,de,m,n;

ll def[50050],cap[500050];

inline

int read()

int res=ch-'0';

while((ch=getchar())>='0'&&ch<='9')

res=res*10+ch-'0';

return res;

}inline

void addedge(int u,int v,long

long p)

inline

bool bfs()}}

return

false;

}inline

long

long dinic( int u,ll flow)

}return res;

}inline

long

long solve()

int main()

str=0,des=n+1;

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

sum=solve();

addedge(de,st,inf);

sum+=solve();

for(int e=adj[des];e;e=nxt[e])

}cout

0;}

LOJ 117 有源匯有上下界最小流

我們看到有源點和匯點的上下界最小流,即在可行流的基礎上要求流量最小。我們先跑一遍可行流,設可行流為flow1flow1flow1 則最小流為可行流 還能向下浮動的流量flow2flow2flow2 其實我們可以發現還能向下浮動的流量就是從原圖匯點到原圖源點的最大流 感性理解 因此步驟為 跑出乙個有源...

117 有源匯有上下界最小流

題目描述 n nn 個點,m mm 條邊,每條邊 e ee 有乙個流量下界 lower e text e lower e 和流量上界 upper e text e upper e 給定源點 s ss 與匯點 t tt,求源點到匯點的最小流。輸入格式 第一行兩個正整數 n nn m mm s ss t...

有源匯有上下界最大 最小流

建圖還是要想一想的.寫一下吧 首先根據有源匯可行流建圖,正向附加邊滿流證明有可行流 然後在這個殘量網路上刪掉 t,s,oo 這條邊,跑 s t 最大流就是最大流,t s 最大流就是最小流 include define int long long define ll long long define ...