题目

好神仙的题目啊啊啊啊啊

没什么思路,发现了题解里的一句\((i,i+1,0,inf-a_i)\)就有点懂了

我们可以考虑一下我们如果就按照上面的方式来连边我们的最大流是什么

显然是\(inf-max(a_i)\)

这显然取决于最小的那一条边的流量

但是我们如果想让最后的流量为\(inf\),就需要额外连一些边

一个区间我们连一条这样的边\((l,r+1,w,inf)\),也就是意味着如果这条边的流量选择为\(f\),那么\([l,r]\)区间的最小流量限制边就会变成\(inf-max(a_i-f)\),因为这 \(f\)的流量可以去走那条边了

而如果想让最后的流量变成\(inf\),显然需要\(max(a_i-f)=0\),这不就正好符合了我们的要求吗

于是就巧妙的解决了

代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define LL long long
#define re register
#define inf 99999999
#define maxn 2005
inline int read() {char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
int n,m,S,T,num=1,ans;
struct E{int v,nxt,w,f;}e[200005];
int vis[maxn],head[maxn],d[maxn];
inline void add(int x,int y,int z,int ff) {e[++num].v=y;e[num].nxt=head[x];e[num].f=ff,e[num].w=z;head[x]=num;}
inline void C(int x,int y,int z,int ff) {add(x,y,z,ff),add(y,x,-1*z,0);}
inline int SPFA() {std::queue<int> q;for(re int i=S;i<=T;i++) vis[i]=0,d[i]=inf;d[T]=0,q.push(T);while(!q.empty()) {int k=q.front();q.pop();vis[k]=0;for(re int i=head[k];i;i=e[i].nxt) if(d[e[i].v]>d[k]+e[i^1].w&&e[i^1].f) {d[e[i].v]=d[k]+e[i^1].w;if(!vis[e[i].v]) q.push(e[i].v),vis[e[i].v]=1;}}return d[S]<inf;
}
int dfs(int x,int now) {if(x==T||!now) return now;int flow=0,ff;vis[x]=1;for(re int i=head[x];i;i=e[i].nxt) if(e[i].f&&!vis[e[i].v]&&d[x]+e[i^1].w==d[e[i].v]) {ff=dfs(e[i].v,min(now,e[i].f));if(ff<=0) continue;flow+=ff,now-=ff;e[i].f-=ff,e[i^1].f+=ff;if(!now) break;}return flow;
}
int main() {n=read(),m=read();int x,l,r;for(re int i=1;i<=n;i++) x=read(),C(i,i+1,0,inf-x);S=0,C(S,1,0,inf),C(n+1,n+2,0,inf),T=n+2;for(re int i=1;i<=m;i++) {l=read(),r=read(),x=read();C(l,r+1,x,inf);}while(SPFA()) {vis[T]=1;while(vis[T]) {for(re int i=S;i<=T;i++) vis[i]=0;ans+=dfs(S,inf)*d[S];}}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/asuldb/p/10456326.html

[NOI2008]志愿者招募相关推荐

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

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

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

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061 1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  M ...

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

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

  4. 单纯型法Ⅱ(bzoj 1061: [Noi2008]志愿者招募)

    线性规划单纯型法:http://blog.csdn.net/jaihk662/article/details/78050666 标准型:m个约束,n个变量,构成m*n的矩阵 C是一个n的向量,B是一个 ...

  5. 【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法

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

  6. [BZOJ1061] [NOI2008] 志愿者招募 - 最小费用最大流

    大部分内容转自: BYVOID - NOI2008 志愿者招募  如果讲道理的话,就是说我们抽象一下这个模型--然后每条费用边就是连接起始日期和结束日期的边,也就是说这条边上的流量增加1,就要增加一个 ...

  7. [NOI2008] 志愿者招募 (费用流)

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

  8. BZOJ1061 [NOI2008]志愿者招募

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

  9. P3980 NOI2008志愿者招募

    志愿者招募 题目链接 https://www.luogu.org/problemnew/show/P3980 题解 这道题很神奇,这种建图方法很有启发性. 我们平时做的题都点都是是一对一的,而这道题的 ...

  10. 【BZOJ】1061: [Noi2008]志愿者招募

    题解 可能是世界上最裸的一个单纯形 (话说全幺模矩阵是啥我到现在都不知道) 假装我们已经看过了算导,或者xxx的论文,知道了单纯形是怎么实现的 扔一个blog走掉..https://www.cnblo ...

最新文章

  1. 编辑数学公式_LaTeXiT for mac(数学公式编辑器)
  2. Ubuntu 安装 opencv-nonfree
  3. IEEE Spectrum 2014 年度编程语言排名
  4. java根据日期判断星座_根据日期计算星座
  5. 经纬度画轨迹图_HYSPLIT后向轨迹制作
  6. 血泪总结!5000字产品需求写作方法论
  7. CCTMXTiledMap的使用
  8. 魅力 .NET:从 Mono、.NET Core 说起
  9. Oracle - 导入异常ORA-01659和11G在Exp时空表不能导出
  10. 三局两胜还是五局三胜?
  11. Android开发中的单元测试
  12. xcopy使用与案例使用
  13. vdbench - 性能压力测试工具
  14. websocket ping pong
  15. AQS中非公平锁的实现原理简介
  16. 第六节 ftpserver的安装与配置(Windows)
  17. amazon - FileZilla 连接 amazon云服务器
  18. 点集配准技术(ICP、RPM、KC、CPD)
  19. 前端基础第一天:HTML常用标签知识点
  20. java 生成 word文档 导出附带图片 已实现

热门文章

  1. php种loop用法,PHP EvLoop 用法 手册 | 示例代码
  2. 计算机二级在学校报还是外面报好,谁知道考计算机二级在哪个学校比较好啊?...
  3. java封装继承多态语法,GO语言中封装,继承,和多态
  4. java 同步块 抛出异常_不把 wait 放在同步块中,为啥这种情况不会抛出 IllegalMonitorStateException?...
  5. 【一篇文章搞懂】dockerfile构建镜像的命令
  6. python【蓝桥杯vip练习题库】ADV-350珠心算测验
  7. python【力扣LeetCode算法题库】21- 合并两个有序链表
  8. 【Deep Learning笔记】用Inception-V3模型进行图像分类
  9. 【深度学习笔记】深度学习中关于epoch
  10. 源码分析 vue-cli 中安装依赖