模板 最小費用最大流
洛谷p3381 【模板】最小費用最大流
這題我用這個會t 只有 80分,感覺最小費用最大流就應該加一些常數優化,否則會非常慢
1 #include 2 #include 3 #include 4 #include 5 #include6 #include 7 #include 8 #include 9 #include 10
#define inf 1e9
11#define maxn 5005
12#define maxm 50005
13#define pair pair 14
using
namespace
std ;
1516
intn,m,s,t,x,y,vol,cost,gedgecount ;
1718
pair ans ;
1920
struct
edge;
23 edge gedges[2*maxm] ;
2425
intghead[maxn],gpre[maxn],gpath[maxn],gdist[maxn] ;
2627 inline void insertedge(int u,int v,int vol,int
cost)
2841
42 inline bool spfa( int s,int
t )
4364}65
}66if(gpre[t]==-1
) 67
return
false
; 68
return
true
; 69}70
71 inline pair mincostflow(int s,int
t) 72 87
}88pair ans ;
89 ans.first = flow ; ans.second =cost ;
90return
ans ; 91}
9293
intmain()
94102 ans =mincostflow(s,t) ;
103 printf("
%d %d\n
",ans.first,ans.second ) ;
104return0;
105 }
這個加了一下優化
然後就跑得比較快了 1400ms
1 #include2 #include3const
int maxn=1e4+10;4
const
int maxm=1e5+10;5
const
int maxt=2139062143
;6 inline int min_(int x,int y)
7int
n,m,s,t,nflow,nfee,flow,fee;
8int
a,b,c,d;
9int h[maxn],hs=1;10
inte_q[maxm],e_z[maxm],e_n[maxm],e_w[maxm],e_f[maxm];
11int add(int q,int z,int k,int w,int f)
12int
q[maxm],head,tail;
13int
w[maxn],p[maxn];
14bool
v[maxn];
15int ap(int k,int
v) 22
void
mcmf()36}
37if(w[t]==maxt) break
;38 nflow=ap(t,maxt);
39 flow+=nflow;
40 fee+=nflow*w[t];41}
42}43int
main()
49mcmf();
50 printf("
%d %d\n
",flow,fee);
51return0;
52 }
洛谷 P3381 模板 最小費用最大流
乙個網路圖雖然最大流確定,但達到最大流的方案並不唯一。如果對於每條邊,都加乙個費用f,表示這條邊流過單位流量的代價,求達到最大流時的最小費用,這就是最小費用最大流問題。解決方法 ek費用流或zwk費用流。這裡只講ek費用流。採用貪心的思想。我們每次增廣時都選擇費用最小的一條。這樣,因為最大流是確定的...
洛谷 P3381 模板 最小費用最大流
題目鏈結 mcmf 最小費用最大流 由於要使用反向邊。定義乙個h i 表示從匯點到i的最短距離。對於一條邊e v,u e.cost e.cost h v h u 這樣可以保證圖中沒有負權邊的存在,這樣就可以使用dij來求最短路。每次求一條最短路,然後通過這條最短路更新最大流,直到找不出最短路為止。i...
洛谷 P3381 模板 最小費用最大流
洛谷 p3381 模板 最小費用最大流 include include include include include include include include include define maxe 50005 define maxn 5005 define inf 0x3f3f3f3f t...