【網路流】最小費用最大流(模板)
#include <bits/stdc++.h> using namespace std; const int Max=50010; const int inf=1e9; int n,m,ans1,ans2,size=1,head,tail,s,t; int first[Max],dis[Max],p[Max],exist[Max],vis[Max],temp[Max]; struct shu{int to,next,len,val;}; shu bian[Max*2]; inline int get_int() { int x=0,f=1; char c; for(c=getchar();(!isdigit(c))&&(c!='-');c=getchar()); if(c=='-') {f=-1;c=getchar();} for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0'; return x*f; } inline void build(int x,int y,int z,int w) { bian[++size].next=first[x];first[x]=size;bian[size].to=y;bian[size].len=z;bian[size].val=w; } inline int spfa() { for(int i=1;i<=tail;i++) p[i]=0; for(int i=1;i<=n;i++) {dis[i]=inf;exist[i]=0;} head=0,tail=1;dis[s]=0;p[1]=s; while(head<=tail) { int point=p[++head]; exist[point]=0; for(int u=first[point];u;u=bian[u].next) { if(bian[u].len > 0 && dis[point]+bian[u].val < dis[bian[u].to]) { dis[bian[u].to]=dis[point]+bian[u].val; //pre[bian[u].to]=u; if(!exist[bian[u].to]) { exist[bian[u].to]=1; p[++tail]=bian[u].to; } } } } if(dis[t] == inf) return 0; else return 1; } inline int dfs(int point,int flow) { if(point == t) return flow; vis[point]=1; int sum=0; for(int &u=temp[point];u;u=bian[u].next) if(!vis[bian[u].to] && dis[bian[u].to] == dis[point] + bian[u].val && bian[u].len > 0) { int minn=dfs(bian[u].to,min(flow-sum,bian[u].len)); ans2+=minn*bian[u].val; bian[u].len-=minn; bian[u^1].len+=minn; sum+=minn; if(flow-sum == 0) break; } vis[point]=0; return sum; } int main() { freopen("lx.in","r",stdin); n=get_int(); m=get_int(); s=1;t=n; for(int i=1;i<=m;i++) { int x=get_int(),y=get_int(),z=get_int(),w=get_int(); build(x,y,z,w); build(y,x,0,-w); } while(spfa()) { memcpy(temp,first,sizeof(first)); int x=dfs(s,inf); while(x)ans1+=x,x=dfs(s,inf); } cout<<ans1<<" "<<ans2<<"\n"; return 0; }
相關推薦
【網路流24題】餐巾計劃(最小費用最大流)
題意 一個餐廳在相繼的 nnn 天裡,每天需用的餐巾數不盡相同。假設第 iii 天需要 rir_iri 塊餐巾。餐廳可以購買新的餐巾,每塊餐巾的費用為 PPP 分;或者把舊餐巾送到快洗部,洗一塊需 MMM天,其費用為 FFF 分;或者送到慢洗部,洗一塊需
【網路流24題】運輸問題(最小費用最大流)
題意 W 公司有 mmm 個倉庫和 nnn 個零售商店。第 iii 個倉庫有 aia_iai 個單位的貨物;第 jjj 個零售商店需要 bjb_jbj 個單位的貨物。貨物供需平衡,即∑i=1mai=∑j=1nbj\sum\limits_{i =
【網路流24題】 No.10 餐巾計劃問題 (線性規劃網路優化 最小費用最大流)
【題意】 一個餐廳在相繼的 N 天裡, 每天需用的餐巾數不盡相同。 假設第 i 天需要 ri 塊餐巾(i=1,2,…, N)。 餐廳可以購買新的餐巾,每塊餐巾的費用為 p 分;或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f分;或者送到慢洗部, 洗一塊需 n 天(n>m),其費用為 s<
【洛谷4016】 負載平衡問題(網路流24題,最小費用最大流)
前言 網路流24題還是要寫一下。 Solution 我們先來研究一下這個題目是個什麼東西: 每一個點有可能比平均數多,也有可能少,然後你就發現相當於是我們建了兩個超級源點和超級匯點,然後從這兩個點去分和流入。 然後對於這個環就可以直接建環(注意建邊的時候的一些細節操作) 跑一邊費用流就好了。 #inc
【網路流】最小費用最大流(模板)
#include <bits/stdc++.h> using namespace std; const int Max=50010; const int inf=1e9; int n,m,ans1,ans2,size=1,head,tail,s,t; int f
2017 ACM-ICPC 亞洲區(烏魯木齊賽區)網路賽 J.Our Journey of Dalian Ends【最小費用最大流】
Life is a journey, and the road we travel has twists and turns, which sometimes lead us to unexpected places and unexpected people. Now our journey of Dal
[洛谷3381]【模板】最小費用最大流
main 最小費用最大流 spf 最大流模板題 rem digi span mem spfa 思路:最小費用最大流模板題。用EdmondsKarp,增廣時使用SPFA求最短路。 1 #include<queue> 2 #include<cstd
[洛谷P3381]【模板】最小費用最大流
code main sdi span printf fast tdi nbsp optimize 題目大意:給出一個網絡圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網絡最大流和在最大流情況下的最小費用。 解題思路:最小費用最大流模板。雖說此題最後兩個點
P3381 【模板】最小費用最大流
false == blog content space cost pre png 單位 P3381 【模板】最小費用最大流 題目描述 如題,給出一個網絡圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網絡最大流和在最大流情
luogo_3381【模板】最小費用最大流
int names push its als llc eof cap pty #include<bits/stdc++.h>using namespace std;#define MAXM 500010#define MAXN 5010#define INF 1
【模板】最小費用最大流
tar getchar print lin problem ron n) std mon https://www.luogu.org/problemnew/show/3381 #include <iostream> #include <cstdio
luogu3381 【模板】最小費用最大流
%d cstring void out mar -m body tmp using 每次選代價最小的流增廣 #include <iostream> #include <cstring> #include <cstdio> #include
【網絡流24題】餐巾計劃問題(最小費用最大流)
open pre ++i 需求 http += cst efi pty 【網絡流24題】餐巾計劃問題(最小費用最大流) 題面 COGS 洛谷上的數據範圍更大,而且要開longlong 題解 餐巾的來源分為兩種: ①新買的 ②舊的拿去洗 所以,兩種情況分別建圖 先考慮第一種
bzoj 1927 [Sdoi2010]星際競速【最小費用最大流】
流量 source 覆蓋 tdi png code struct || 就是 果然還是不會建圖… 設\( i \)到\( j \)有通路,代價為\( w[i][j] \),瞬移到i代價為\( a[i] \),瞬移到i代價為\( a[j] \),逗號前是流量。 因為每個點只
洛谷 P4015 運輸問題 【最小費用最大流+最大費用最大流】
div add cst push sin eof namespace get main s向倉庫i連ins(s,i,a[i],0),商店向t連ins(i+m,t,b[i],0),商店和倉庫之間連ins(i,j+m,inf,c[i][j])。建兩次圖分別跑最小費用最大流和最大
洛谷 P4014 分配問題 【最小費用最大流+最大費用最大流】
pre clas memset namespace ins include i++ oid 的人 其實KM更快……但是這道題不卡,所以用了簡單粗暴的費用流,建圖非常簡單,s向所有人連流量為1費用為0的邊來限制流量,所有工作向t連流量為1費用為0的邊,然後對應的人和工作連(i
bzoj 1834: [ZJOI2010]network 網絡擴容【最大流+最小費用最大流】
mark 建圖 network 最小 bfs source include tdi down 第一問直接跑最大流即可。建圖的時候按照費用流建,費用為0. 對於第二問,在第一問dinic剩下的殘量網絡上建圖,對原圖的每條邊(i,j),建(i,j,inf,cij),表示可以用c
洛谷P3381 【模板】最小費用最大流(dijstra費用流)
就是 tro fin https copy priority 而不是 ++ printf 題目描述 如題,給出一個網絡圖,以及其源點和匯點,每條邊已知其最大流量和單位流量費用,求出其網絡最大流和在最大流情況下的最小費用。 輸入輸出格式 輸入格式: 第一行包含四
【luogu P3381 最小費用最大流】 模板
pty pre const truct str next eof OS return 題目鏈接:https://www.luogu.org/problemnew/show/P3381 把bfs變成spfa 1 #include <cstdio> 2
Luogu--3381 【模板】最小費用最大流
題目連結 3381 【模板】最小費用最大流 dijkstra 可能因為常數比較大 t了一個點但是 開o2之後可以輕鬆水過 dijkstra 版本 #include<bits/stdc++.h> using namespace std; #define ma