原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061

题意:问你如何购买志愿者使得满足题意的总费用最小。

解题思路:首先,由于志愿者存在的时间是一个区间,我们考虑使用差分序列,这样的话我们就可以比较轻松的建图跑一遍最小费用最大流了。我们定义每个中间点代表着每一天,显然第i天需要的志愿者是i-1天的志愿者+x,用差分即可完成。建图方式详见AC代码。

附:AC代码(因为我比较蒻,所以打了low的一逼的SPFAcostflow,所以跑的巨慢。)

#include<stdio.h>
#include<string.h>
#define S 0
#define T 1002
#define MAXN 1005
#define inf 0x7fffffff
#define min(a,b) (a<b?a:b)
struct zxy{int to,next,v,c;}edge[];
int n,m,cnt=,head[MAXN],dis[MAXN],pre[MAXN],que[MAXN];
bool vis[MAXN];
inline void ins(int x,int y,int v,int l){
edge[++cnt].to=y,edge[cnt].c=l,edge[cnt].v=v,edge[cnt].next=head[x],head[x]=cnt;
}
inline void insw(int x,int y,int v,int l){ins(x,y,v,l); ins(y,x,,(-)*l);}
inline int in(){
int x=,f=;char ch=getchar();
while(ch<''||ch>'') f=ch=='-'?-:,ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x*f;
}
inline bool SPFA_costflow(int s,int e){
register int h=,t=,w,v;
memset(dis,/,sizeof(dis));
dis[s]=,vis[s]=,que[]=s;
while(h!=t){
(++h)%=MAXN;
w=que[h];
for (register int i=head[w]; i; i=edge[i].next){
v=edge[i].to;
if (dis[v]>dis[w]+edge[i].c&&edge[i].v){
dis[v]=dis[w]+edge[i].c;pre[v]=i;
if (!vis[v]){
vis[v]=;
if (dis[v]<dis[que[h+]]){
que[h]=v;h=(h-+MAXN)%MAXN;
}
else{
(++t)%=MAXN;que[t]=v;
}
}
}
}
vis[w]=;
}
return dis[e]!=dis[MAXN-];
}
int costflow(int s,int t){
int cost=;
while(SPFA_costflow(s,t)){
int mi=inf;
for (register int i=t; i; i=edge[pre[i]^].to)
mi=min(mi,edge[pre[i]].v);
for (register int i=t; i; i=edge[pre[i]^].to)
edge[pre[i]].v-=mi,edge[pre[i]^].v+=mi;
cost+=mi*dis[t];
}
return cost;
}
void init(){
n=in(),m=in();int x=,pre=;
for (int i=; i<=n; ++i){
register int t=in(); x=t-pre;pre=t;
if (x>) insw(S,i,x,);
else insw(i,T,(-)*x,);
insw(i+,i,inf,);
}
insw(n+,T,inf,);
for (register int i=; i<=m; ++i){
register int l=in(),r=in(),v=in();
insw(l,r+,inf,v);
}
}
int main(){
init();
printf("%d",costflow(S,T));
}

【网络流】【BZOJ1061】【NOI2008】志愿者招募的更多相关文章

  1. 网络流解线性规划问题 BZOJ1061: [Noi2008]志愿者招募

    线性规划定义: 在给定有限的资源和竞争约束情况下,很多问题都可以表述为最大化或最小化某个目标.如果可以把目标指定为某些变量的线性函数,而且如果可以将资源约束指定为这些变量的等式或不等式,则得到了一个线 ...

  2. [BZOJ1061][Noi2008]志愿者招募

    [BZOJ1061][Noi2008]志愿者招募 试题描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿 ...

  3. 【费用流】BZOJ1061: [Noi2008]志愿者招募(这题超好)

    1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5291  Solved: 3173[Submit][Stat ...

  4. 【费用流】BZOJ1061[NOI2008]-志愿者招募

    [题目大意] 一个项目需要n天完成,其中第i天至少需要Ai个人.共有m类人可以招募,其中第i类可以从第Si天做到第Ti天,每人的招募费用为Ci元.求最小招募费用. [思路] byvoid神犇的建图详解 ...

  5. [BZOJ1061] [Noi2008] 志愿者招募 (费用流)

    Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能 ...

  6. BZOJ1061 [Noi2008]志愿者招募 【单纯形】

    题目链接 BZOJ1061 题解 今天终于用正宗的线性规划\(A\)了这道题 题目可以看做有\(N\)个限制和\(M\)个变量 变量\(x_i\)表示第\(i\)种志愿者的人数,对于第\(i\)种志愿 ...

  7. BZOJ1061: [Noi2008]志愿者招募(线性规划)

    Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5725  Solved: 3437[Submit][Status][Discuss] Descript ...

  8. BZOJ1061 NOI2008 志愿者招募 线性规划、费用流

    传送门 一道思路很妙的线性规划网络流 设\(X_i\)表示第\(i\)天需要的人数,\(P_i\)表示第\(i\)种人雇佣的个数 那么我们可以列出一系列式子 比如说样例就可以列出三个式子: \(P_1 ...

  9. [BZOJ1061][Noi2008]志愿者招募 线性规划+费用流

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061 根据题意列方程,然后用网络流解线性规划. 题解直接贴ByVoid的吧,太神了:htt ...

  10. 线性规划费用流解法(Bzoj1061: [Noi2008]志愿者招募)

    题面 传送门 Sol 线性规划费用流解法用与求解未知数为非负数的问题 这道题可以列出一堆形如 \(x[i]+x[j]+x[k]+...>=a[p]\) 的不等式 我们强行给每个式子减去一个东西, ...

随机推荐

  1. 作业07-Java GUI编程

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 1.2 可选:使用常规方法总结其他上课内容. 关于事件.事件源.事件监听器的总结: 事件:用户在GUI上进行的操作,如鼠标单击.输入文字.关 ...

  2. iOS开发-继承特征详解

    面向对象的三大特性:封装,继承,多态. 1.继承 继承既能保证类的完整,又能简化代码. 把公共的方法和实例变量写在子类,子类只需要写父类独有的实例变量和方法即可. 继承是面向对象三大特性之一,合理的继 ...

  3. 一个C&C++程序的生命历程

    翻了好多博客,内容星星点点,没找到我想要的,现在吸取大神精华,加上本人拙见,总结如下: 一个C或C++程序从你开始编写,到结束,整个过程,都做了些什么,请看下文: 先看大体的过程:看图: 我在这里主要 ...

  4. 《javascript设计模式与开发实践》阅读笔记(13)—— 职责链模式

    职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 书里的订单的例子 假设我们负责一个售卖手机 ...

  5. 利用java反射读写csv中的数据

      前一段有个需求需要将从数据库读取到的信息保存到csv文件中,在实现该需求的时候发现资料比较少,经过收集反射和csv相关资料,最终得到了如下程序.  1.在使用java反射读取csv文件数据时,先通 ...

  6. c# gridview 新增行

    string[] newRow = {"long","d","b"}; Gridview.Rows.Insert(Gridview.Rows ...

  7. Mego开发文档 - 数据属性生成值

    数据属性生成值 该功能用于在数据插入或更新时为指定属性生成期望的值,Mego提供了非常灵活的实现方式以满足各种数据提交时的自动赋值问题. 生成值目的及模式 在Mego中生成值的目的一定是插入数据或更新 ...

  8. idea找不到package下的mapper.xml文件

    由于开发人员使用不同的开发工具,导致eclipse的开发人员将mapper.xml文件习惯性的放到package下,以便查看,而eclipse编译时,不会忽略package下的xml以及dtl文件,所 ...

  9. 阿里云API网关(11)API的三种安全认证方式

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  10. maven常见问题处理(3-2)maven打包时跳过测试的几个方法

    运行mvn install时跳过Test方法一:<project> [...] <build> <plugins> <plugin> <group ...