很裸的費用流。
建圖也很顯然。
從源點向第一天連容量為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]的邊。現在的問題就是,我們需要花一定的代價對流量進行補償,對於一類志願者(s,
t,c)
(s,t,c)
(s,t,c
),我們從第s
ss天向第t+1
t+1t+
1天連容量為inf
infin
f,費用為c
cc的邊。
然後跑最小費用最大流。
**:
#include
#define ll long long
#define re register
#define cs const
cs int n=
1e3+7;
cs int inf=
1e9;
struct edge
;typedef std::vector
::iterator iter;
std::vector g[n]
;iter cur[n]
;inline
void
adde
(int u,
int v,
int val,
int cost));
g[v]
.push_back
((edge));
}int n,m,s,t,tot;
int dis[n]
;bool vis[n]
;inline
bool
spfa()
}return dis[t]
}int tot_cost,tot_flow;
intdfs
(int u,
int flow)
int ans=
0;vis[u]
=true
;for
(iter &e=cur[u]
;e!=g[u]
.end()
;++e)
if(e-
>cap&&dis[e-
>to]
==dis[u]
+e->w&&
!vis[e-
>to])}
vis[u]
=false
;return ans;
}inline
void
flow()
signed
main()
while
(m--
)flow()
;std::cout<"\n"
;return0;
}
NOI 2008 志願者招募(費用流)
題目描述 一共有n天,每天需要a i 個人,一共有m類志願者,每類有無限個,可以從s i 服務到t i 需要花費c i 的費用。問要滿足要求,最小的費用。題目分析 這題有乙個經典的也很奇妙的構圖法 利用不等式構圖 這個我不懂,想看的話請到byvoid神牛的blog裡面搜 我的想法很樸素,流的話就表示...
費用流 NOI2008志願者招募
time limit 20 sec memory limit 162 mb submit 5171 solved 3089 submit status discuss 申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了乙個難 題 為即將啟動的奧運新專案招募一批...
NOI2008 志願者招募 (費用流)
申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了乙個難題 為即將啟動的奧運新專案招募一批短期志願者。經過估算,這個專案需要n 天才能完成,其中第i 天至少需要ai 個人。布布通過了解得知,一共有m 類志願者可以招募。其中第i 類可以從第si 天工作到第ti ...