BZOJ 1061 Noi2008 志願者招募

2022-04-30 08:51:09 字數 2016 閱讀 4816

time limit: 20 sec  memory limit: 162 mb

submit: 4064  solved: 2476

[submit][status][discuss]

申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了乙個難

題:為即將啟動的奧運新專案招募一批短期志願者。經過估算,這個專案需要n 天才能完成,其中第i 天至少需要

ai 個人。 布布通過了解得知,一共有m 類志願者可以招募。其中第i 類可以從第si 天工作到第ti 天,招募費用

是每人ci 元。新官上任三把火,為了出色地完成自己的工作,布布希望用盡量少的費用招募足夠的志願者,但這

並不是他的特長!於是布布找到了你,希望你幫他設計一種最優的招募方案。

第一行包含兩個整數n, m,表示完成專案的天數和可以招募的志願者的種類。 接下來的一行中包含n 個非負

整數,表示每天至少需要的志願者人數。 接下來的m 行中每行包含三個整數si, ti, ci,含義如上文所述。為了

方便起見,我們可以認為每類志願者的數量都是無限多的。

僅包含乙個整數,表示你所設計的最優方案的總費用。

3 32 3 4

1 2 2

2 3 5

3 3 2

141 ≤ n ≤ 1000,1 ≤ m ≤ 10000,題目中其他所涉及的資料均 不超過2^31-1。

%lyd...

這道題普遍做法貌似都是線性規劃單純形的做法,lyd告訴我們可以跑上下界最小費用可行流...

我們把每一天看成乙個點,然後從i向i+1連邊,上界為inf,下界為ai,費用為0...

然後對於每一類志願者,從ti+1到si連邊,上界為inf,下界為0,費用為ci...這樣每花費ci的代價,就從si到ti增加乙個流...

然後就轉化成了無源匯上下界最小費用可行流,其實就是把無源匯上下界可行流的最大流轉化成最小費用最大流...

怎麼求無源匯上下界可行流?

如果把c-b作為容量上界,0作為容量下界,就是一般的網路流模型。

然而求出的實際流量為f(u,v)+b(u,v),不一定滿足流量守恆,需要調整。

設inb[u]=∑b(i,u),outb[u]=∑b(u,i),d[u]=inb[u]-outb[u]。

新建源匯,s向d>0的點連邊,d<0的點向匯點連邊,容量為相應的d。 在該網路上求最大流,則每條邊的流量+下界就是原網路的乙個可行流。

1 #include2 #include3 #include4 #include5 #include6

//by neighthorn

7#define inf 0x3f3f3f3f

8#define inf 0x3f3f3f3f3f3f

9using

namespace

std;

1011

const

int maxn=1000+5,maxm=100000+5;12

13int n,m,s,t,cnt,w[maxm],hd[maxn],fl[maxm],to[maxm],nxt[maxm],min[maxn],vis[maxn],from

[maxn];

1415

long

long

dis[maxn],dif[maxn];

1617 inline bool spfa(void)31

}32return dis[t]!=inf;33}

3435 inline long

long find(void)40

41 inline int dinic(void)47

48 inline void add(int l,int s,int x,int

y)52

53 signed main(void

)67 printf("

%d\n

",dinic());

68return

0;

69 }

view code

by neighthorn

bzoj1061 Noi2008 志願者招募

跟上一道基本相同,可以單純形法解線性規劃,也可以費用流.寫費用流的話建圖就是一般的線性規劃轉費用流的套路,加上基變數,然後化成等式,每個下式減上式之後可以化成表示流量平衡的等式,然後根據等式建圖就好了,跑乙個最小費用最大流.寫單純形沒有寫網路流好理解,單純形的話因為這是最小化費用的,首先要轉化成對偶...

BZOJ1061 NOI2008 志願者招募

bzoj 我們設每類志願者分別招募了b i b i 個 那麼,我們可以得到一系列的方程 s i x t i b i a x s i x t i b i a x 一共n n 天,所以是 n role presentation n n個方程 因為有不等式讓我們很不爽,所以換成等式。這裡,設y i y i...

bzoj 1061 Noi2008 志願者招募

題目大意 專案需要n 天才能完成,其中第i 天至少需要ai 個人。布布通過了解得知,一共有m 類志願者可以招募。其中第i 類可以從第si 天工作到第ti 天,招募費用是每人ci 元。新官上任三把火,為了出色地完成自己的工作,布布希望用盡量少的費用招募足夠的志願者 題解 include include...