codevs 1803 志願者招募

2022-03-05 22:43:50 字數 2184 閱讀 2175

2023年noi全國競賽

時間限制: 2 s 

空間限制: 128000 kb 

題目等級 : 大師 master

申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的 主管。布布剛上任就遇到了乙個難題:為即將啟動的奧運新專案招募一批短期志 願者。經過估算,這個專案需要 n 天才能完成,其中第 i 天至少需要 ai個人。 布布通過了解得知,一共有 m 類志願者可以招募。其中第 i 類可以從第 si天工 作到第 ti 天,招募費用是每人 ci元。新官上任三把火,為了出色地完成自己的 工作,布布希望用盡量少的費用招募足夠的志願者,但這並不是他的特長!於是 布布找到了你,希望你幫他設計一種最優的招募方案。

輸入描述 input description

輸入檔案 employee.in 的第一行包含兩個整數 n, m,表示完成專案的天數和 可以招募的志願者的種類。 接下來的一行中包含 n 個非負整數,表示每天至少需要的志願者人數。  接下來的 m 行中每行包含三個整數 si, ti, ci,含義如上文所述。為了方便起 見,我們可以認為每類志願者的數量都是無限多的。

輸出描述 output description

輸入檔案 employee.out 中僅包含乙個整數,表示你所設計的最優方案的總費用。

樣例輸入 sample input

3 32 3 4

1 2 2

2 3 5

3 3 2

樣例輸出 sample output

14 資料範圍及提示 data size & hint

【樣例說明】

招募 3 名第一類志願者和 4 名第三類志願者。

30%的資料中,1 ≤ n, m ≤ 10,1 ≤ ai ≤ 10;

100%的資料中,1 ≤ n ≤ 1000,1 ≤ m ≤ 10000,題目中其他所涉及的資料均不超過 231-1。 

解題:上下界費用流。

建圖,第i天向第i+1天建立下界為第i天需要的人數的邊,對於人的種類,可以連線ti+1 到 si 費用為ti,流量為無限的邊。然後就是類似於上下界流那樣,建圖。建圖後求最小費用流。注意由於i到i+1的邊表示第i天至少得招募人數,所有就會有n+1個點。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 

11 #include

12 #include 13

#define ll long long

14#define pii pair15

#define inf 0x3f3f3f3f3f3f3f3fll

16using

namespace

std;

17const

int maxn = 100010;18

struct

arc27

};28 arc e[maxn*10

];29

inthead[maxn],p[maxn],s,t,tot,n,m;

30 ll d[maxn],in

[maxn];

31bool

vis[maxn];

32void add(int u,int

v,ll flow,ll cost)

38bool

spfa()

45 d[s] = 0;46

q.push(s);

47while(!q.empty())59}

60}61}

62return p[t] > -1;63

}64ll solve()75}

76return

ans;77}

78int

main()

92for(int i = 0; i < m; ++i)

96for(int i = 1; i <= n + 1; ++i)

97if(in[i] < 0) add(i,t,-in[i],0

);98

else

if(in[i] > 0) add(s,i,in[i],0

);99 printf("

%lld

",solve());

100}

101return0;

102 }

view code

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...

BZOJ 1061, 志願者招募

傳送門 最小化招聘給定不同型別志願者,以滿足每日不同人數要求的費用總和。由線性規劃轉化為最小費用最大流來處理。一般按如下步驟進行操作 新增鬆弛變數,將不等號都變為等號。分別用下乙個式子減去上乙個式子,如果每個變數只出現了兩次且符號一正一負,那麼可以轉化為費用流。對於每個式子建立乙個點,那麼每個變數對...

bzoj1061 志願者招募

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