嘟嘟嘟
沒錯,我開始學費用流了!
做法也是比較樸素的\(spfa\)。
就是每一次以費用為權值跑一遍\(spfa\)找到一條最短路,然後把這條道全流滿,並把這一次的流量和費用累加到答案上。因此我們需要記錄路徑。
就這樣一直跑直到沒有增廣路為止,然後好像就沒了。(不難啊……)
因為每乙隻找一條道,所以其實挺慢的。
#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define enter puts("")
#define space putchar(' ')
#define mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int inf = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 5e3 + 5;
const int maxm = 5e4 + 5;
inline ll read()
inline void write(ll x)
int n, m, s, t;
struct edge
e[maxm << 1];
int head[maxn], ecnt = -1;
void addedge(int x, int y, int w, int f)
; head[x] = ecnt;
e[++ecnt] = (edge);
head[y] = ecnt;
}queueq;
int dis[maxn], flow[maxn], pre[maxn];
bool in[maxn];
bool spfa(int s, int t)
} }
return dis[t] != inf;
}int maxflow = 0, mincost = 0;
void update(int s, int t)
maxflow += flow[t];
mincost += flow[t] * dis[t];
}void mcmf(int s, int t)
int main()
mcmf(s, t);
write(maxflow), space, write(mincost), enter;
return 0;
}
luoguP3381 模板 最小費用最大流
題目描述 如題,給出乙個網路圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網路最大流和在最大流情況下的最小費用。輸入輸出格式 輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含四個正整數ui vi wi fi,表示第...
luoguP3381 模板 最小費用最大流
如題,給出乙個網路圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網路最大流和在最大流情況下的最小費用。include include include include define maxn 5005 define maxm 50005 2 define inf 1000000007...
Luogu P3381 模板 最小費用最大流
傳送門 最小費用最大流,就是在求最大流的前提下,使選出的路徑費用最小。每條邊除了容量w外,還要記錄乙個單位流量費用co。其實就是 dinic 的 bfs 和 spfa 同時進行,每次更新增廣路時,保證選擇的一定是費用最小的一條路徑。paopo 說這個用不了當前弧優化,所以我就沒用qwq 對於每個點,...