1 #include 2 #include 3 #include 4 #include 56using
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...