有源匯上下界網路流

2022-04-10 05:20:42 字數 2593 閱讀 8831

loj116

給出乙個有源匯點的有向圖。每條邊有最大流量和最小流量。現在需要求出從源點到匯點的最大流可以是多少。

上下界可行流

先回顧有源匯上下界可行流乾了些什麼。

其實可行流就是找到了一種滿足流量下界的方案。

在滿足了流量下界之後,可以發現還有一些殘餘的自由流量(可選可不選)

於是我們在之前的殘餘網路上再跑一邊\(dinic\)。這次不算超級源匯點,也不算從\(t\)到\(s\)添的那條邊。

這樣將在可行流種算出來的流量加上後來跑出來的流量就是答案了。

/*

* @author: wxyww

* @date: 2019-02-10 15:13:47

* @last modified time: 2019-02-10 16:31:08

*/#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int inf = 1e9,n = 100000;

ll read()

while(c>='0'&&c<='9')

return x*f;

}struct node e[n];

int head[n],ejs = 1;

void add(int u,int v,int w)

int dep[n];

queueq;

int s,t;

int low[n],rd[n],cd[n],ans,cur[n];

int bfs()

} }return 0;

}int dfs(int u,int now)

} return ret;

}int dinic()

return ans;

}int main()

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

if(ans != dinic())

for(int i = head[s];i;i = e[i].nxt)

e[i].w = e[i ^ 1].w = 0;

for(int i = head[t];i;i = e[i].nxt) e[i].w = e[i ^ 1].w = 0;

ans = e[3].w;

e[3].w = e[2].w = 0;

s = ss;t = tt;

ans += dinic();

cout

給出乙個有源匯點的有向圖。每條邊有最大流量和最小流量。現在需要求出在從源點到匯點的最小流可以是多少。

和上面的最大流類似。

我們先跑一邊可行流。然後就滿足下界了。然後我們不想要那麼多流量,也就是說我們想要退流。

怎麼退流呢。考慮反向邊,反向邊中加上的流量其實是正邊中減去的流量。所以從t到s跑一遍最大流。然後用之前可行流中的流量減去即可。

**與上面極度類似,只要改標註的兩個地方就行了。

/** @author: wxyww

* @date: 2019-02-10 15:13:47

* @last modified time: 2019-02-10 16:47:20

*/#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int inf = 1e9,n = 1000000;

ll read()

while(c>='0'&&c<='9')

return x*f;

}struct node e[n];

int head[n],ejs = 1;

void add(int u,int v,int w)

int dep[n];

queueq;

int s,t;

int low[n],rd[n],cd[n],ans,cur[n];

int bfs()

} }return 0;

}int dfs(int u,int now)

} return ret;

}int dinic()

return ans;

}int main()

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

if(ans != dinic())

for(int i = head[s];i;i = e[i].nxt)

e[i].w = e[i ^ 1].w = 0;

for(int i = head[t];i;i = e[i].nxt) e[i].w = e[i ^ 1].w = 0;

ans = e[3].w;

e[3].w = e[2].w = 0;

s = tt;t = ss;//!!!

ans -= dinic();//!!!

cout

}

有源匯上下界最小流 模板

這只是 其中一種 做法 這只是其中一種做法 這只是其中一 種做法 我暫時還沒有理解,只是先放個模板而已 首 先還 是根據下 界來建圖 原圖源 點s,匯 點t 首先還是根據下界來建圖,原圖源點s,匯點t 首先還是根據 下界來建 圖,原圖 源點s,匯點t 然 後因 為流量守 恆,新建 超級源s 1和超級...

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 ...