uva 10594(最小費用最大流)

2022-07-10 05:27:15 字數 1789 閱讀 9282

題意:在乙個無向網路中,告訴你邊的容量與費用。現在需要傳送d個資料問你你否能傳送成功,若成功則最小費用是多少。

思路:顯然是最小費用最大流問題,這道題的見圖比較簡單。只需要新增乙個原點費用為d指向1就行了。接下來的事情就是套模版了。

**如下:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10

#define len 5010

11#define ll long long

1213

using

namespace

std;

1415

//mincostmaxflow by kuangbin

16const ll maxn = 10000;17

const ll maxm = 100000;18

const ll inf =0x7ffffffffffffffll;

19ll tn, m, vcap, data;

2021

struct

edge

22edge[maxm];

25ll head[maxn],tol;

26ll pre[maxn],dis[maxn];

27bool

vis[maxn];

28 ll n;//

節點總個數,節點編號從0~n-1

29void

init(ll n)

3035

void

addedge(ll u,ll v,ll cap,ll cost)

3650

bool

spfa(ll s,ll t)

5159 dis[s] = 0

;60 vis[s] = true;61

q.push(s);

62while(!q.empty())

6380}81

}82}83

if(pre[t] == -1)return

false;84

else

return

true;85

}8687//

返回的是最大流,cost存的是最小費用

88 ll mincostmaxflow(ll s,ll t,ll &cost)

89100

for(ll i = pre[t]; i != -1; i = pre[edge[i^1

].to])

101106 flow +=min;

107}

108return

flow;

109}

110111

intmain()

112121 scanf("

%lld%lld

", &data, &vcap);

122for(ll i=0; i)

126 addedge(0, 1, data, 0

);127 ll cost, ans = mincostmaxflow(0, n-1

, cost);

128if(ans!=data)printf("

impossible.\n");

129else printf("

%lld\n

", cost);

130}

131return0;

132 }

view code

uva10806 (最小費用最大流)

題意 從1到n 再從n到1 不經過重複的邊 如果是點就是旅行商問題了 問最短路 思路 最小費用最大流 建立乙個超級源 它的容量為2,到第乙個點的費用為0 然後每個連線的點的容量為1 只要找出兩條最小費用的路 那麼就可以了。include using namespace std include inc...

uva10746 (最小費用最大流)

題目大意 有n所銀行,有m輛巡警車,給出巡警車到各個銀行所需要的距離,問平均最小的距離是多少。思路 最小費用最大流的問題。構造乙個超級源點,然後連線邊到各輛巡警車,巡警車與各所銀行相連線,容量為1,費用為k。先求出費用最小的路,然後在費用最小的路上增流 include using namespace...

最小費用最大流

網 絡流的基本問題為 設乙個有向賦權圖g v,e v 其中有兩個特殊的節點s和s s稱為發點,s 稱為收點。圖中各 邊的方向和權數表示允許的流向和最大可能的流量 容量 問在這個網路圖中從發點流出到收點匯集,最大可通過的實際流量為多少?流向的分布情況為怎樣?設有乙個網路圖g v,e v e中的每條邊 ...