無源匯上下界最小費用可行流。
每天作為乙個點。
每一天向下一天連一條上界為正無窮下界為該天所需人數費用為0的邊。
對於每個志願者,從他結束工作的後一天向開始工作的第一天連一條上界為正無窮下界為0費用為招募費的邊。
在這個無源匯網路中,招募乙個志願者即產生乙個ti+1—>si—>si+1—>si+2—>……—>ti—>ti+1的圈,使si到ti天的流量加1。
原圖跑無源匯上下界最小費用可行流就行了。
模擬poj3680,對於乙個條件覆蓋連續點問題,通常用將點依次相連再加邊的方式,兩題區別在於有上界正向連邊最大流,有下界反向連邊可行流。
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;
7const
int dian=1005;8
const
int bian=30005;9
const
int inf=0x3f3f3f3f;10
inth[dian],nxt[bian],ver[bian],val[bian],cos[bian];
11int d[dian],v[dian],minn[dian],with[dian],in[dian],out
[dian];
12int
n,m,tot,aa,bb,cc,mf;
13int
s,t;
14void add(int a,int b,int c,int d,int
e)19
bool
tell()42}
43}44}
45if(d[t]==0x3f3f3f3f)46
return
false;47
return
true;48
}49intzeng()
54return d[t]*minn[t];55}
56int
dinic_cost()
62int
main()
74for(int i=1;i<=m;i++)
78for(int i=1;i<=n+1;i++)
84 printf("
%d",mf+dinic_cost());
85return0;
86 }
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...