NOI2008 志願者招募 (費用流)

2022-05-07 01:42:05 字數 1579 閱讀 7049

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

寫的真好

建模很巧妙

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

template

<

class

t>

inline

void

read

(t &x)

const

int maxn =

650;

const

int maxm =

50000

;const

int inf =

1000000000

;int n, m;

int info[maxn]

, fir[maxn]

, to[maxm<<1]

, nxt[maxm<<1]

, c[maxm<<1]

, wt[maxm<<1]

, cnt =1;

inline

void

link

(int u,

int v,

int cc,

int ww)

int s, t;

ll dis[maxn]

, ans;

queue<

int>q;

bool vis[maxn]

, inq[maxn]

;bool

spfa()

}return dis[t]

< dis[0]

;}intaug

(int u,

int max)

vis[u]=1

;int flow =

0, delta;

for(

int v,

&i = info[u]

; i; i = nxt[i])if

(c[i]

&&!vis[v=to[i]

]&& dis[v]

== dis[u]

+ wt[i]

&&(delta=

aug(v,

min(max-flow, c[i]))

))vis[u]=0

;return flow;

}ll mincost

(int s,

int t)

int main (

)

NOI 2008 志願者招募(費用流)

題目描述 一共有n天,每天需要a i 個人,一共有m類志願者,每類有無限個,可以從s i 服務到t i 需要花費c i 的費用。問要滿足要求,最小的費用。題目分析 這題有乙個經典的也很奇妙的構圖法 利用不等式構圖 這個我不懂,想看的話請到byvoid神牛的blog裡面搜 我的想法很樸素,流的話就表示...

NOI2008 志願者招募(費用流)

很裸的費用流。建圖也很顯然。從源點向第一天連容量為inf infin f的邊,從第n 1 n 1n 1天向匯點連inf infin f的邊。然後從第i ii天向第i 1 i 1i 1天連容量為inf a i inf a i inf a i 的邊。現在的問題就是,我們需要花一定的代價對流量進行補償,對...

費用流 NOI2008志願者招募

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