費用流模板練習

2022-09-18 01:54:23 字數 2101 閱讀 5076

在falldream大佬的耐心指導下弄懂了原始對偶演算法,跟spfa比起來多不了幾行,以後費用流就打它了。打幾題練練手。

[usaco 2003 february]farm tour

題目大意:n個點m條邊的無向圖,要求找到一條路徑從1走到n再走回1,不能走重複的邊,求最短距離。(n<=1000,m<=10000)

思路:相當於從1選兩條不相交的路徑走到n,權和最小,比較裸的費用流,每條邊建成費用為該邊的長度,流量為1,s到1號點連費用0,流量2,n號點到t連費用0,流量2,複雜度o(費用流(n,m))。

#include#include

inline

intread()

#define mn 1000

#define mm 20002

#define s mn+1

#define t mn+2

#define inf 0x7fffffff

struct edgee[mm*2+5

];int h[mn+5],en=1,q[mn+5],qn,inq[mn+5],d[mn+5],dis,ans,mk[mn+5

];inline

void ins(int x,int y,int w,int

c);h[x]=en;

e[++en]=(edge);h[y]=en;

}inline

int next(int x)

inline

int prev(int x)

bool

spfa()

for(i=1;i<=t;++i)for(j=h[i];j;j=e[j].nx)e[j].c+=d[e[j].t]-d[i];

return dis+=d[s],d[s]0];}

int dfs(int x,int

r)

returnu;}

intmain()

餐巾計畫問題/[bzoj]1221 軟體開發

題目大意:n天,每天需要ai條餐巾,可以以f元一條的**買餐巾,或者花fa元洗一條用過的餐巾,a天後可用,或花fb元洗一條用過的餐巾,b天後可用,求最小花費。(n<=1000)

思路:考慮最小費用流,我們把每天拆成兩個點,點i表示第i天乾淨的餐巾,i'表示第i天用過的餐巾,s到i連費用f,流量inf,表示買新的餐巾,s到i'連費用0,流量ai,表示這天新產生了ai條用過的餐巾,點i'向點(i+1)'連費用0,流量inf,表示把用過的餐巾留著不洗備用,點i'向點i+a連費用fa,流量inf的邊,表示用一種方式洗餐巾,b同理。複雜度o(費用流(n,n))。下面貼的程式裡的建圖略有區別,思路大致相同。

#include#include

inline

intread()

#define mv 2000

#define me 6000

#define s mv+1

#define t mv+2

#define inf 0x7fffffff

struct edgee[me*2+5

];int h[mv+5],en=1,d[mv+5],q[mv+5],qn,inq[mv+5],mk[mv+5

],dis,ans;

inline

void ins(int x,int y,int w,int

c);h[x]=en;

e[++en]=(edge);h[y]=en;

}inline

int next(int x)

inline

int prev(int x)

bool

spfa()

for(i=1;i<=t;++i)for(j=h[i];j;j=e[j].nx)e[j].c+=d[e[j].t]-d[i];

return dis+=d[s],d[s]0];}

int dfs(int x,int

r)

returnu;}

intmain()

while(spfa())do memset(mk,0,sizeof(mk));while

(dfs(s,inf));

printf("%d

",ans);

}

費用流模板

const int oo 1e9 無窮 const int mm 11111111 邊 const int mn 888888 點 int node,src,dest,edge int ver mm flow mm cost mm nex mm int head mn dis mn p mn q m...

費用流(模板)

費用流模板 spfa不停找當前從s到t的最小費用路,然後重新整理最大流 這裡把每條邊的cost為0,同樣就可以求最大流,不過有點慢 include include include include include include include include include include incl...

費用流模板

我借鑑了一些大神的 也就是他們經常用的模板。費用流模板 include includeusing namespace std const int oo 1e9 const int mm 11111 const int mn 888 int node,src,dest,edge int ver mm ...