题目描述 Description

为了绿化乡村,H村积极响应号召,开始种树了。

H村里有n幢房屋,这些屋子的排列顺序很有特点,在一条直线上。于是方便起见,我们给它们标上1~n。树就种在房子前面的空地上。

同时,村民们向村长提出了m个意见,每个意见都是按如下格式:希望第li个房子到第ri个房子的房前至少有ci棵树。

因为每个房屋前的空地面积有限,所以每个房屋前最多只能种ki棵树

村长希望在满足村民全部要求的同时,种最少的树以节约资金。请你帮助村长。

输入描述 Input Description

输入第1行,包含两个整数nm

第2行,有n个整数ki

第3~m+1行,每行三个整数lirici

输出描述 Output Description

输出1个整数表示在满足村民全部要求的情况下最少要种的树。村民提的要求是可以全部满足的

样例输入 Sample Input

4 3

3 2 4 1

1 2 4

2 3 5

2 4 6

样例输出 Sample Output

8

数据范围及提示 Data Size & Hint

对于30%的数据,0<n≤100,0<m≤100,ki=1;

对于50%的数据,0<n≤2,000,0<m≤5,000,0<ki≤100;

对于70%的数据,0<n≤50,000,0<m≤100,000,0<ki≤1,000;

对于100%的数据,0<n≤500,000,0<m≤500,000,0<ki≤5,000。

  1. /*
  2. 差分约束
  3. */
  4. #include<cstdio>
  5. #include<cstring>
  6. #include<iostream>
  7. #include<queue>
  8. #define M 500010
  9. using namespace std;
  10. int head[M],dis[M],vis[M],n,m,cnt;
  11. struct node
  12. {
  13. int v,t,pre;
  14. };node e[M*];
  15. void add(int x,int y,int z)
  16. {
  17. ++cnt;
  18. e[cnt].v=y;
  19. e[cnt].t=z;
  20. e[cnt].pre=head[x];
  21. head[x]=cnt;
  22. }
  23. void spfa(int s,int t)
  24. {
  25. memset(dis,0x3f3f3f3f,sizeof(dis));
  26. queue<int> q;
  27. q.push(s);vis[s]=;dis[s]=;
  28. while(!q.empty())
  29. {
  30. int u=q.front();
  31. q.pop();vis[u]=;
  32. for(int i=head[u];i;i=e[i].pre)
  33. if(dis[e[i].v]>dis[u]+e[i].t)
  34. {
  35. dis[e[i].v]=dis[u]+e[i].t;
  36. if(!vis[e[i].v])
  37. {
  38. vis[e[i].v]=;
  39. q.push(e[i].v);
  40. }
  41. }
  42. }
  43. printf("%d",-dis[t]);
  44. }
  45. int main()
  46. {
  47. scanf("%d%d",&n,&m);
  48. for(int i=;i<=n;i++)
  49. {
  50. int z;scanf("%d",&z);
  51. add(i-,i,z);
  52. add(i,i-,);
  53. //因为题目要求一定能满足所有要求,所以要从i到i-1建一条无权边
  54. }
  55. for(int i=;i<=m;i++)
  56. {
  57. int x,y,z;
  58. scanf("%d%d%d",&x,&y,&z);
  59. add(y,x-,-z);
  60. }
  61. spfa(n,);
  62. return ;
  63. }

种树(codevs 1768)的更多相关文章

  1. Codevs 1768 种树 3(差分约束)

    1768 种树 3 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 为了绿化乡村,H村积极响应号召,开始种树了. H村里有n幢 ...

  2. 种树 (codevs 1653) 题解

    [问题描述] 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号为1..n.每个块大小为一个单位尺寸并最多可种一棵树.每个居民想在门前种些树并指定了三个号码b,e ...

  3. codevs 种树3

    codevs上的题目,自从wikioi改名后,就不怎么做题了. 这道题的话注释在代码中就可以了,还是求最长路,相较返回如果中间可以种多个的话,那就种越多越好,因为这样可以减少种的棵树, 所以这个i与i ...

  4. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  5. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  8. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  9. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

随机推荐

  1. FTP FtpWebRequest 异步上传文件

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  2. PropertyInfo 类

    [AttributeUsage(AttributeTargets.Property)] //Models 特性        public class CanWriteAttribute : Attr ...

  3. [Swift通天遁地]四、网络和线程-(6)检测网络连接状态

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  4. [转]Linux定时任务Crontab详解

    转自:http://blog.chinaunix.net/uid-7552018-id-182133.html 今天做了个数据库的备份脚本,顺便系统得学习一下Linux下定时执行脚本的设置.Linux ...

  5. SQL之T-sql 语句操作数据库

    用SQL语句操作数据库 在上一次的话题中我们谈到了怎么使用数据库,说到了数据库的基本用法. 不过只是仅限于一些简单的操作,so 如果你不想被人说--"你们只是动动鼠标操作就可以了! 没什么技 ...

  6. Ajax——异步基础知识(二)

    XML数据格式 首行必须是版本号和格式等信息 <?xml version="1.0" encoding="utf-8" ?> 最外层需要一个根节点进 ...

  7. 史上巨坑: vim的"set foldmethod=syntax"设置竟然是导致ctrl+p(ctrl+n)补全在文件稍大时光标位于中间位置补全效率变慢的元凶!

    最近我的vim又让我闹心了. 问题出现在supertab的补全速度上, 有时候按下tab键半天才弹出补全列表, 即便是弹出了列表在列表上下移动也变得的相当缓慢, 这让我的很是蛋疼. 在完全无法接受这个 ...

  8. eclipse版本和jdk的版本兼容问题

    eclipse也是有版本的,当版本过低时,无法兼容高版本的jdk 项目中用的是jdk1.8,但是低版本的eclipse只能选到jdk1.7,导致java文件在编译的过程中,不识别1.8版本jdk的语法 ...

  9. Random同时生成多个随机数

    贴一个简单示例 public DataTable selectStuInfo() { DataTable dt = new DataTable(); dt.Columns.Add("姓名&q ...

  10. [luogu2591 ZJOI2009] 函数

    传送门 Solution 画图找规律.. Code //By Menteur_Hxy #include <cstdio> #define min(a,b) ((a)>(b)?(b): ...