BZOJ 1834 網路擴容 最大流 最小費用流

2022-07-17 10:39:08 字數 2244 閱讀 3785

題目大意:

給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。

求: 1、在不擴容的情況下,1到n的最大流; 

2、將1到n的最大流增加k所需的最小擴容費用。

思路:

第一問直接求費用流,第二問,在第一問的殘餘網路上,對於每條邊額外加上inf容量費用為w的邊,限制最大流量為k,也就是在0-1之間連邊,容量為s,費用為0,然後跑一遍最小費用流就可以了。

1 #include2

#define ios ios::sync_with_stdio(false);//

不可再使用scanf printf

3#define max(a, b) ((a) > (b) ? (a) : (b))//

禁用於函式,會超時

4#define min(a, b) ((a) < (b) ? (a) : (b))

5#define mem(a) memset(a, 0, sizeof(a))

6#define dis(x, y, x1, y1) ((x - x1) * (x - x1) + (y - y1) * (y - y1))

7#define mid(l, r) ((l) + ((r) - (l)) / 2)

8#define lson ((o)<<1)

9#define rson ((o)<<1|1)

10#define accepted 0

11#pragma comment(linker, "/stack:102400000,102400000")//

棧外掛程式12

using

namespace

std;

13 inline int

read()

1417

while (ch>='

0'&&ch<='9')

18return x*f;19}

20 typedef long

long

ll;21

const

int mod = 1000000007;//

const引用更快,巨集定義也更快

22const

double eps = 1e-10;23

const

double pi = acos(-1

);24

const

int inf = 0x3f3f3f3f;25

const

int maxn = 10000 + 10;26

struct

edge

2730

};31 vectore;

32 vectorg[maxn];

33int a[maxn];//

找增廣路每個點的水流量

34int p[maxn];//

每次找增廣路反向記錄路徑

35int d[maxn];//

spfa演算法的最短路

36int inq[maxn];//

spfa演算法是否在佇列中

3738

void addedge(int u, int v, int c, int

cost)

3946

bool bellman(int s, int t, int& flow, long

long &cost)

47//

bellman 演算法入隊72}

73}74}

75if(d[t] == inf)return

false;//

找不到增廣路

76 flow += a[t];//

最大流的值,此函式引用flow這個值,最後可以直接求出flow

77 cost += (long

long)d[t] * (long

long)a[t];//

距離乘上到達匯點的流量就是費用

78for(int u = t; u != s; u = e[p[u]].u)//

逆向存邊

7983

return

true;84

}85int mincostmaxflow(int s, int t, long

long &cost)

8692

intu[maxn], v[maxn], c[maxn], w[maxn];

93int

main()

94

BZOJ 1834 網路擴容 最大流 費用流

對於第一問,直接求最大流。對於第二問,建源點s和匯點t,s連1容量為inf,費用為0的邊,n連t容量為最大流 k,費用為0的邊。這樣就把最大流限制為最多增加k了。限制需要求擴充的最小費用,原圖的邊多連一條容量為inf,費用為增容費用k的邊。跑一遍費用流即是答案。include include inc...

bzoj1834 網路擴容

給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。輸入檔案的第一行包含三個整數n,m,k,表示有向圖的點數 邊數以及所需要增加的流量。接下來的m行每行包含四個整數u,v...

bzoj1834 網路擴容 網路流

好久沒寫題解了啊 給你一幅n個點的網路,先求出其1到n的最大流,每條弧還會有個屬性co sti cos ti 表示沒擴容乙個單位的費用,現在我們要求的就是擴容k個單位的最小費用 這是一道比較裸的網路流,第一問直接dinic就是了,重點就在於第二問。我們把第一問的殘量網路繼續利用,其中的每條弧的費用都...