luogu P3381 模板 最小費用最大流

2022-05-09 12:24:14 字數 1370 閱讀 1609

嘟嘟嘟

沒錯,我開始學費用流了!

做法也是比較樸素的\(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 對於每個點,...