BZOJ 1061, 志願者招募

2021-07-26 15:03:15 字數 943 閱讀 3861

傳送門

最小化招聘給定不同型別志願者,以滿足每日不同人數要求的費用總和。

由線性規劃轉化為最小費用最大流來處理。

一般按如下步驟進行操作:

①新增鬆弛變數,將不等號都變為等號。分別用下乙個式子減去上乙個式子,如果每個變數只出現了兩次且符號一正一負,那麼可以轉化為費用流。

②對於每個式子建立乙個點,那麼每個變數對應一條邊,從乙個點流出,向另乙個點流入。

③對於等式右邊的常數c,如果是的,對應從源點向該點連一條流量c,費用0的邊;如果是的對應從該點向匯點連一條流量−c,費用0的邊。

④對於每個變數,從它係數為正的式子向係數為負的式子連一條容量為inf,費用為它在目標函式裡係數的邊。

這樣網路流模型就構造完畢了。

#include

const int n=1005,m=45005,inf=~0u>>2;

int n,m,s,t,l,r,x,y,z,ed=1,i,tmp,ans,a[n],g[n],nxt[m],u[m],v[m],c[m],co[m],q[m],d[n],f[n];

bool in[n];

void add(int

x,int

y,int z,int zo)

bool spfa()

}in[x]=0;

}return d[t]int main()

for(i=n+1;i>1;i--) add(i,i-1,inf,0);

for(i=1;i<=m;i++)

while(spfa())

printf("%d",ans);

return

0;}

bzoj 1061 志願者招募

明顯的線性規劃網路流,據說當時考場上就1個人a了?a i j 表示第i種志願者第j天是否工作 p i 表示第i種志願者的人數 sigma a i x p i need x 補充函式y i 則sigma a i x p i need x y x 差分,start i 表示第i種志願者開始工作的時間,e...

bzoj1061 志願者招募

題意 給m類志願者,第i個志願者從第 l i 天工作到第 r i 天,費用為c i 每種志願者可以選擇無限多人。每一天都有給定的最少志願者數目要求a i 求費用最小的選擇方案,輸出費用。思路 明顯是一道線性規劃可以解決的問題,但我不會寫單純型。聽溪哥說線性規劃都有網路流的等價形式,不過我在網上沒有找...

BZOJ 1061 志願者招募

思路 可以用不等式的改裝變成費用流.將不等式列出,如果有負的常數,那麼就從等式連向t,如果是正的就從s連向等式,流量為常數,費用為0。如果是變數,那麼找出都有這個變數的兩個等式,從負的連向正的流量為inf的邊,如果有費用,那就再加上費用。1 include2 include3 include4 in...