[ZPG TEST 115] 种树【差分约束】
4. 种树
(trees.pas/c/cpp)
【问题描述】
一条街的一边有几座房子。因为环保原因居民想要在路边种些树。路边的地区被分割成块,并被编号为1..n。每个块的大小为一个单位尺寸并最多可种一棵树。每个居民想在门前种些树并指定了三个号码b,e,t。这三个数表示该居民想在b和e之间最少种t棵树。当然,b<=e,居民必须保证在指定地区不能种多于地区被分割成块数的树,即要求t<=e-b+1。允许居民想种树的各自区域可以交叉。出于资金短缺的原因,环保部门请你求出能够满足所有居民的要求,需要种树的最少数量。
【文件输入】
第一行为n,表示区域的个数;
第二行为h,表示房子的数目;
下面h行描述居民的需要:b e t (0<b<=e<=30000,r<=e-b+1) 分别用一个空格分开。
【文件输出】
输出为满足所有要求的最少树的数量。
【样例输入】
9
4
1 4 2
4 6 2
8 9 2
3 5 2
【样例输出】
5
【数据规模】
30%的数据满足0<n<=1000;0<h<=500
100%的数据满足n<=30000;h<=5000
此题乃差分约束裸题,只恨当时不会啊。
令a[i]表示i位置有没有放种树,令s[i]表示a数列的前缀和,则对于题目输入的一系列b,e,t转化为一系列不等式s[e] - s[b - 1] >= t,很显然这就是一个差分约束系统。把不等式写成大于等于的形式,是因为这样子就是求最长路,求最长路得出的结果就是最小的一组解集,求最短路得出的结果就是最大的一组解集,不予证明。注意还有两个条件,对于任意的i,s[i] - s[i - 1] >= 0,s[i - 1] - s[i] >= -1.
#include <cstdio>
#include <cstring> const int maxn = 30005, maxe = 80005; int n, h, t1, t2, t3;
int head[maxn], to[maxe], next[maxe], w[maxe], lb;
int que[maxn], head_, tail, d[maxn];
bool inq[maxn]; inline void ist(int aa, int ss, int ww) {
to[lb] = ss;
next[lb] = head[aa];
head[aa] = lb;
w[lb] = ww;
++lb;
} int main(void) {
freopen("trees.in", "r", stdin);
freopen("trees.out", "w", stdout);
memset(head, -1, sizeof head);
memset(next, -1, sizeof next);
scanf("%d", &n);
scanf("%d", &h);
while (h--) {
scanf("%d%d%d", &t1, &t2, &t3);
ist(t1 - 1, t2, t3);
}
for (int i = 0; i < n; ++i) {
ist(i, i + 1, 0);
ist(i + 1, i, -1);
} memset(d, -0x3c, sizeof d);
que[tail++] = 0;
inq[0] = true;
d[0] = 0;
while (head_ != tail) {
h = que[head_++];
inq[h] = false;
if (head_ == n + 1) {
head_ = 0;
}
for (int j = head[h]; j != -1; j = next[j]) {
if (d[to[j]] < d[h] + w[j]) {
d[to[j]] = d[h] + w[j];
if (!inq[to[j]]) {
inq[to[j]] = true;
que[tail++] = to[j];
if (tail == n + 1) {
tail = 0;
}
}
}
}
}
printf("%d\n", d[n]);
return 0;
}
[ZPG TEST 115] 种树【差分约束】的更多相关文章
- 算法复习——差分约束(ssoi种树)
		
题目: 题目描述 为了绿化乡村,H 村积极响应号召,开始种树了. H 村里有 n 幢房屋,这些屋子的排列顺序很有特点,在一条直线上.于是方便起见,我们给它们标上 1-n .树就种在房子前面的空地上. ...
 - Codevs 1768 种树 3(差分约束)
		
1768 种树 3 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 为了绿化乡村,H村积极响应号召,开始种树了. H村里有n幢 ...
 - P1250 种树(差分约束  / 贪心)
		
题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1-N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E,T ...
 - 题解——洛谷P1250 种树(差分约束)
		
一道看一眼就知道差分约束的题目 但是最短路spfa的时候注意松弛条件是 if(dis[u]+w[i]<dis[v[i]]) dis[v[i]]=dis[u]+w[i]; 不能写成 if(dis[ ...
 - 【最短路·差分约束】洛谷P1250
		
题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E, ...
 - 最短路 & 差分约束 总结
		
一.引例 1.一类不等式组的解 二.最短路 1.Dijkstra 2.图的存储 3.链式前向星 4.Dijkstra + 优先队列 ...
 - [hdu4598]二分图判定,差分约束
		
题意: 给一个图,问能否给每个点分配一个实数值,使得存在一个数实数T,所有点满足:|value(i)| < T 且 u,v之间有边<=> |value(u)-value(v)| &g ...
 - Candies-POJ3159差分约束
		
Time Limit: 1500MS Memory Limit: 131072K Description During the kindergarten days, flymouse was the ...
 - poj3159 差分约束 spfa
		
//Accepted 2692 KB 1282 ms //差分约束 -->最短路 //TLE到死,加了输入挂,手写queue #include <cstdio> #include & ...
 
随机推荐
- 原来,表名和字段名不能在pdo中“参数化查询”
			
https://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-or-column-name-as ...
 - Visual Studio VS如何修改代码字体
			
工具-选项-环境-字体和颜色
 - instancetype VS id
			
英文好的直接读下面链接的文章就好了: http://stackoverflow.com/questions/8972221/would-it-be-beneficial-to-begin-using- ...
 - C#构造方法(函数)   C#方法重载   C#字段和属性  MUI实现上拉加载和下拉刷新  SVN常用功能介绍(二)  SVN常用功能介绍(一)  ASP.NET常用内置对象之——Server  sql server——子查询   C#接口  字符串的本质  AJAX原生JavaScript写法
			
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
 - JQuery实现表格行的上移、下移、删除、增加
			
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%&g ...
 - linux【第六篇】用户和用户管理及定时任务复习
			
定时任务复习 1.什么是定时任务? 2.如何编辑查看定时任务(配置文件位置?),语法的特殊字符意义是什么?- * , / 3.书写定时任务有哪些要领? 4.生产如何调试定时任务 5.生产场景配置定时任 ...
 - POI异步导入Excel兼容xsl和xlsx
			
项目架构:spring+struts2+hibernate4+oracle 需求:用户导入excel文件,导入到相应的数据表中,要求提供导入模板,支持xls和xlsx文件 思路分析: 1.提供一个下载 ...
 - python3 安装 #zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
			
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz Modules/Setup.dist https://askubuntu ...
 - easyUI下拉列表点击事件的使用
			
可以通过input 和select来创建下拉列表 其中select的创建如下: 通过json来创建js数组 [{ "id":1, "text":"te ...
 - YTU 2572: 猜灯谜
			
2572: 猜灯谜 时间限制: 1 Sec 内存限制: 128 MB 提交: 154 解决: 91 题目描述 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每 ...