最小費用最大流(SPFA版本)

2022-05-20 23:23:58 字數 1324 閱讀 2546

1 #include 2 #include 3 #include 4 #include 5

6using

namespace

std;78

#define ll long long

9#define pb push_back

10#define fi first

11#define se second

1213

14//

時間複雜度: o(v * e^2 * log(v))

15//

spfa中不會出現負環,如果出現環,則說明這些邊還有流量,

16//

但是每次流過之後這些邊的流量都會減去,加上反向邊

1718

19const

int n = 5e3 + 10;20

const

int m = 5e4 + 10;21

const

int inf =1e9;

2223

struct

edgee[m << 2

];26

inthead[n], vis[n], dis[n], pre[n];

27 queueque;

28int

n, m, s, t, tot;

2930 inline void add(int u, int v, int cap, int

w)36

37void

init()

43while(!que.empty()) que.pop();44}

4546

bool

spfa()74}

75} 76}

7778

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

false;79

else

return

true;80

}8182void

mcmf()

9293

//更新流量

94for(int o = pre[t]; ~o; o = pre[e[o ^ 1

].to])

98 mf +=min;

99 mc += min *dis[t];

100}

101102 printf("

%d %d\n

", mf, mc);

103}

104105

void

solve()

114mcmf();

115}

116117

intmain()

模板 SPFA增廣 最小費用最大流

簡單的用spfa增廣進行費用流的求解 與ek求最大流類似,只是此時要求最大流的同時費用最小 所以用spfa增廣,就可以費用盡量小 模板 include include include using namespace std const int maxn 705,maxe 144005,inf 0x3...

最小費用最大流

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

最小費用最大流

const int maxn 250 const int maxm 62272 const int inf 0x4ffffff int n,m struct edge edge maxm int head maxn cnt void init void addedge int u,int v,int...