日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ 1834 Luogu P2604 [ZJOI2010]网络扩容 (最小费用最大流)

發(fā)布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ 1834 Luogu P2604 [ZJOI2010]网络扩容 (最小费用最大流) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目連接: (luogu) https://www.luogu.org/problemnew/show/P2604

(bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1834

題解: 第一問所有的費用全按\(0\)建,跑完了之后很自然想到利用殘余網(wǎng)絡(luò)。

\(n\)和一個新點\(T\)連邊,然后原來的殘量網(wǎng)絡(luò)保留,在此基礎(chǔ)上對于原來的每條邊流量均按\(+\inf\)建,費用為原始費用再跑一遍即可。

時間復(fù)雜度\(O(MaxFlowMinCost(n,m))\)

(然而智障的我不會處理殘量網(wǎng)路還想做\(K\)次費用流每次\(+1\),真是沒腦子)

代碼

#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define llong long long using namespace std;const int N = 1002; const int M = 10000; const llong INF = 1000000000000ll; struct Edge {int u,v,nxt,rev; llong c,w; } e[(M<<1)+3]; Edge ae[M+3]; int fe[N+3]; int que[N+3]; llong dis[N+3]; bool inq[N+3]; int lst[N+3]; int n,m,en,p,s,t; llong mf,mc;void addedge(int u,int v,llong w,llong c) {en++; e[en].u = u; e[en].v = v; e[en].w = w; e[en].c = c;e[en].nxt = fe[u]; fe[u] = en; e[en].rev = en+1;en++; e[en].u = v; e[en].v = u; e[en].w = 0; e[en].c = -c;e[en].nxt = fe[v]; fe[v] = en; e[en].rev = en-1; }bool spfa() {for(int i=1; i<=n; i++) dis[i] = INF;int head = 1,tail = 2; que[tail-1] = s; dis[s] = 0ll;while(head!=tail){int u = que[head]; head++; if(head==n+1) head = 1;for(int i=fe[u]; i; i=e[i].nxt){if(e[i].w>0 && dis[e[i].v]>dis[u]+e[i].c){dis[e[i].v] = dis[u]+e[i].c;lst[e[i].v] = i;if(!inq[e[i].v]){inq[e[i].v] = true;que[tail] = e[i].v; tail++; if(tail==n+1) tail = 1;}}}inq[u] = false;}return dis[t]!=INF; }void calcflow() {llong flow = INF;for(int i=t; i!=s; i=e[lst[i]].u){flow = min(flow,e[lst[i]].w);}for(int i=t; i!=s; i=e[lst[i]].u){e[lst[i]].w -= flow; e[e[lst[i]].rev].w += flow;}mf += flow; mc += flow*dis[t]; }void mfmc() {while(spfa()){calcflow();} }int main() {scanf("%d%d%d",&n,&m,&p);for(int i=1; i<=m; i++){scanf("%d%d%lld%lld",&ae[i].u,&ae[i].v,&ae[i].w,&ae[i].c);addedge(ae[i].u,ae[i].v,ae[i].w,0ll);}s = 1; t = n; mf = mc = 0ll;mfmc();printf("%lld ",mf);n++; addedge(n-1,n,p,0); t = n;for(int i=1; i<=m; i++){addedge(ae[i].u,ae[i].v,INF,ae[i].c);}mf = mc = 0ll;mfmc();printf("%lld\n",mc);return 0; } 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的BZOJ 1834 Luogu P2604 [ZJOI2010]网络扩容 (最小费用最大流)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。