NOI2008志願者招募,奇妙的費用流

2021-08-08 19:25:06 字數 805 閱讀 9041

這是題解

感覺沒什麼好說的,至於為什麼要下減上,實質上是差分思想的運用,以將一段連續的東西變成兩個單點(如果不是兩點,可能不能費用流?)。

最後再巧妙地運用流量守恆原理來表達等式,就可以了。

#include

#include

typedef long long ll;

const ll inf=1ll<<62;

const int m=1000005,n=10005;

intq[n*100];

struct graphe[m<<1];

int h[n],xb,le[n],lv[n],n;

ll d[n],mi[n];

bool b[n];

inline void addedge(int u,int v,int w,ll f),h[u]=xb,e[++xb]=(edge),h[v]=xb;

}ll mcmf(int s,int t)

}if(d[t]==inf)return ans;x=mi[t];

for(i=t;i!=s;i=lv[i])

e[le[i]].f-=x,e[e[le[i]].o].f+=x,ans+=1ll*e[le[i]].c*x;}}

}g;int n,m,i,x,y,s,t,c;

int main()

g.addedge(i,n+3,0,y);

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

return

printf("%lld\n",g.mcmf(n+2,n+3)),0;

}

NOI 2008 志願者招募

考慮用 p i 表示第 i 天實際招收的人數,我們假設我們有三種志願者,分別是 1 to 2,1 to 3 2 to 3 我們招手的人數分別是 b 1,b 2,b 3 那麼第一天實際人數就是 p 1 b 1 b 2 geq a 1 同理我們把三個不等式寫出來 b 1 b 2 ge a 1 b 1 b...

NOI2008志願者招募

申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了乙個難題 為即將啟動的奧運新專案招募一批短期志願者。經過估算,這個專案需要n 天才能完成,其中第i 天至少需要ai 個人。布布通過了解得知,一共有m 類志願者可以招募。其中第i 類可以從第si 天工作到第ti ...

NOI2008 志願者招募

oj題號 bzoj1061 題目大意 有 n 個任務,m 個志願者,完成每個任務 i 至少需要 a i 個人,每個人只有在 s i 到 t i 的時候有空,並需要被支付 c i 的報酬,求完成所有任務的最小支出。思路 先挖空後補空 將每個時間抽象成點,並在時間軸的兩端增加源匯 s 和 t 每個相鄰的...