題目大意:
給定一張有向圖,每條邊都有乙個容量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就是了,重點就在於第二問。我們把第一問的殘量網路繼續利用,其中的每條弧的費用都...