【网络流】【BZOJ1061】【NOI2008】志愿者招募
原题链接: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】志愿者招募的更多相关文章
- 网络流解线性规划问题 BZOJ1061: [Noi2008]志愿者招募
线性规划定义: 在给定有限的资源和竞争约束情况下,很多问题都可以表述为最大化或最小化某个目标.如果可以把目标指定为某些变量的线性函数,而且如果可以将资源约束指定为这些变量的等式或不等式,则得到了一个线 ...
- [BZOJ1061][Noi2008]志愿者招募
[BZOJ1061][Noi2008]志愿者招募 试题描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿 ...
- 【费用流】BZOJ1061: [Noi2008]志愿者招募(这题超好)
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 5291 Solved: 3173[Submit][Stat ...
- 【费用流】BZOJ1061[NOI2008]-志愿者招募
[题目大意] 一个项目需要n天完成,其中第i天至少需要Ai个人.共有m类人可以招募,其中第i类可以从第Si天做到第Ti天,每人的招募费用为Ci元.求最小招募费用. [思路] byvoid神犇的建图详解 ...
- [BZOJ1061] [Noi2008] 志愿者招募 (费用流)
Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能 ...
- BZOJ1061 [Noi2008]志愿者招募 【单纯形】
题目链接 BZOJ1061 题解 今天终于用正宗的线性规划\(A\)了这道题 题目可以看做有\(N\)个限制和\(M\)个变量 变量\(x_i\)表示第\(i\)种志愿者的人数,对于第\(i\)种志愿 ...
- BZOJ1061: [Noi2008]志愿者招募(线性规划)
Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 5725 Solved: 3437[Submit][Status][Discuss] Descript ...
- BZOJ1061 NOI2008 志愿者招募 线性规划、费用流
传送门 一道思路很妙的线性规划网络流 设\(X_i\)表示第\(i\)天需要的人数,\(P_i\)表示第\(i\)种人雇佣的个数 那么我们可以列出一系列式子 比如说样例就可以列出三个式子: \(P_1 ...
- [BZOJ1061][Noi2008]志愿者招募 线性规划+费用流
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061 根据题意列方程,然后用网络流解线性规划. 题解直接贴ByVoid的吧,太神了:htt ...
- 线性规划费用流解法(Bzoj1061: [Noi2008]志愿者招募)
题面 传送门 Sol 线性规划费用流解法用与求解未知数为非负数的问题 这道题可以列出一堆形如 \(x[i]+x[j]+x[k]+...>=a[p]\) 的不等式 我们强行给每个式子减去一个东西, ...
随机推荐
- Beta开始前准备
Beta准备 1. 讨论组长是否重选的议题和结论. 经过讨论,我们认为,经过一段时间的磨合,现任组长是不需要更换的. 2. 下一阶段需要改进完善的功能. 增加关于征信的功能,贴近选题主题 美化界面,尽 ...
- leetcode题解 6.ZigZag Conversion
6.ZigZag Conversion 题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a gi ...
- 释义Oracle 11r2中并行执行相关参数
因最近对现场某些服务器进行诊断和调整,用到了这类参数,因此对这类参数做了详尽的查阅和研究,现将该类参数释义如下,以方便同行和自己参考,禁止转载: 1.PARALLEL_ADAPTIVE_MULTI_U ...
- 移动端300ms与点透总结
300ms,主要发生在mobile 为啥会出现300ms延迟现象 浏览器想知道用户是否dobule tap(双击缩放) 下列情况不会出现300ms延迟 桌面浏览器 meta的viewport设置了us ...
- emqtt 试用(五)emq 的用户密码认证
MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿名认证(anonymous),通过加载认证插件可开启 ...
- python 网络爬虫与信息提取 学习笔记day4
正则表达式简介: 简洁表示一组字符串的特征或者模式,在文本处理中十分常用,主要应用于字符串匹配中 1. 通用的字符串表达框架 2. 简洁表达一组字符串的表达式 3. 针对字符串表达简洁和特征思想 ...
- MySQLdb、 flask-MySQLdb 、MySQL-python 安装失败
今天在学习flask的时候,学习到数据库部分,连接mysql生成表,运行程序报错误:No module named MySQLdb 此时 需要安装 以下两个中任何一个 pip install flas ...
- JavaScript 克隆
JavaScript 克隆 本次学习内容: 克隆:只克隆标签和属性,不克隆文本. 克隆的功能,如果不添加使用Ture,就只会克隆标签和属性,不会克隆文本. 克隆的参数全部是节点对象,不能是字符串 &l ...
- python——re模块
python--re模块 一 正则表达式的作用 1.给字符串进行模糊匹配, 2.对象就是字符串 二 字符匹配(普通字符.元字符) 普通字符:数字字符和英文字母和自身匹配 2.元字符:. ^ $ * + ...
- scrapy-redis使用以及剖析
scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler - 调度器 dupefilter - URL去重 ...