BZOJ1061 NOI2008 志願者招募

2021-08-20 06:19:22 字數 1540 閱讀 9099

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

]表示第

i i

天多招募的人數

這樣,方程變成了(∑

s[i]

≤x≤t

[i]b

[i])

−y[i

]=a[

x]' role="presentation">(∑s

[i]≤

x≤t[

i]b[

i])−

y[i]

=a[x

](∑s

[i]≤

x≤t[

i]b[

i])−

y[i]

=a[x

]所以我們得到了乙個方程組 ⎧⎩

⎨⎪⎪⎪

⎪⎪⎪0

∑s[i

]≤1≤

t[i]

b[i]

−y[1

]∑s[

i]≤2

≤t[i

]b[i

]−y[

2]..

.∑s[

i]≤n

≤t[i

]b[i

]−y[

n]0=

0=a[

1]=a

[2]=

a[n]

=0int n,m,a[max];

struct linee[50000];

int h[max],cnt=2;

inline

void add(int u,int v,int w,int fy)

;h[u]=cnt++;

e[cnt]=(line);h[v]=cnt++;

}bool vis[max];

int s,t;

ll cost,dis[max];

bool spfa(int s,int t)

}vis[u]=false;

}if(dis[t]>=1e18)return

false;

return

true;

}int dfs(int u,int flow)

}return ret;

}int main()

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

while(spfa(t,s))cost+=1ll*dis[s]*dfs(s,inf);

printf("%lld\n",cost);

return

0;}

bzoj1061 Noi2008 志願者招募

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

bzoj 1061 Noi2008 志願者招募

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

BZOJ 1061 Noi2008 志願者招募

time limit 20 sec memory limit 162 mb submit 4064 solved 2476 submit status discuss 申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了乙個難 題 為即將啟動的奧運新專案招募一批...