题目描述

一条街的一边有几座房子。因为环保原因居民想要在路边种些树。路边的地区被分割成块,并被编号成1..N。每个部分为一个单位尺寸大小并最多可种一棵树。每个居民想在门前种些树并指定了三个号码B,E,T。这三个数表示该居民想在B和E之间最少种T棵树。当然,B≤E,居民必须记住在指定区不能种多于区域地块数的树,所以T≤E-B+l。居民们想种树的各自区域可以交叉。你的任务是求出能满足所有要求的最少的树的数量。

写一个程序完成以下工作:

输入输出格式

输入格式:

第一行包含数据N,区域的个数(0<N≤30000);

第二行包含H,房子的数目(0<H≤5000);

下面的H行描述居民们的需要:B E T,0<B≤E≤30000,T≤E-B+1。

输出格式:

输出文件只有一行写有树的数目

输入输出样例

输入样例#1:

9
4
1 4 2
4 6 2
8 9 2
3 5 2
输出样例#1:

5

题解

很简单的差分约束

很容易发现s[b]-s[e-1]>=t

     s[i]-s[i-1]>=0

     s[i]-s[i-1]<=1

所以s[e-1]-s[b]<=-t

  s[i-1]-s[i]<=0

  s[i]-s[i-1]<=1

然后最短路SPFA

代码如下:

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std; struct edge{
int to,ne,dis;
}e[]; int n,m,x,y,z,ecnt,head[],dis[];
bool used[];
queue<int> q; void add(int a,int b,int c)
{
e[++ecnt].to=b;
e[ecnt].ne=head[a];
e[ecnt].dis=c;
head[a]=ecnt;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
add(x-,y,-z);
}
for(int i=;i<=n;++i)
{
add(i-,i,);
add(i,i-,);
add(n+,i,);
}
add(,n+,);
memset(dis,,sizeof(dis));
dis[]=;
q.push();
used[]=;
while(!q.empty())
{
int d=q.front();
q.pop();
used[d]=;
for(int i=head[d];i;i=e[i].ne)
{
int dd=e[i].to;
if(dis[dd]>dis[d]+e[i].dis)
{
dis[dd]=dis[d]+e[i].dis;
if(!used[dd])
{
used[dd]=;
q.push(dd);
}
}
}
}
printf("%d",-dis[n]);
}

另外刚开始时我是用最长路建图

s[b]-s[e-1]>=t

s[i]-s[i-1]>=0

s[i-1]-s[i]>=-1

但是WA了

求好心人帮忙看下代码问题

代码如下:

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std; struct edge{
int to,ne,dis;
}e[]; int n,m,x,y,z,ecnt,head[],dis[];
bool used[];
queue<int> q; void add(int a,int b,int c)
{
e[++ecnt].to=b;
e[ecnt].ne=head[a];
e[ecnt].dis=c;
head[a]=ecnt;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
add(x-,y,z);
}
for(int i=;i<=n;++i)
{
add(i-,i,);
add(i,i-,-);
add(n+,i-,);
}
add(n+,n,);
add(,n+,);
q.push();
used[]=;
while(!q.empty())
{
int d=q.front();
q.pop();
used[d]=;
for(int i=head[d];i;i=e[i].ne)
{
int dd=e[i].to;
if(dis[dd]<dis[d]+e[i].dis)
{
dis[dd]=dis[d]+e[i].dis;
if(!used[dd])
{
used[dd]=;
q.push(dd);
}
}
}
}
printf("%d",dis[n]);
}

【最短路·差分约束】洛谷P1250的更多相关文章

  1. 题解——洛谷P1250 种树(差分约束)

    一道看一眼就知道差分约束的题目 但是最短路spfa的时候注意松弛条件是 if(dis[u]+w[i]<dis[v[i]]) dis[v[i]]=dis[u]+w[i]; 不能写成 if(dis[ ...

  2. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  3. Candies POJ - 3159 (最短路+差分约束)

    During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher b ...

  4. 转载 - 最短路&差分约束题集

    出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548    A strange lift基础最短路(或bfs)★ ...

  5. 最短路 & 差分约束 总结

     一.引例      1.一类不等式组的解 二.最短路       1.Dijkstra       2.图的存储       3.链式前向星       4.Dijkstra + 优先队列      ...

  6. S - Layout (最短路&&差分约束)

    Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 < ...

  7. K - Candies(最短路+差分约束)

    题目大意:给N个小屁孩分糖果,每个小屁孩都有一个期望,比如A最多比B多C个,再多了就不行了,会打架的,求N最多比1多几块糖 分析:就是求一个极小极大值...试试看 这里需要用到一个查分约束的东西 下面 ...

  8. HDU 1384 Intervals &洛谷[P1250]种树

    差分约束 差分约束的裸题,关键在于如何建图 我们可以把题目中给出的区间端点作为图上的点,此处应注意,由于区间中被标记的点的个数满足区间加法,这里与前缀和类似,对于区间[L..R]来说,我们加入一条从L ...

  9. 洛谷P1250种树(贪心)

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

随机推荐

  1. LintCode-丑数

    设计一个算法.找出仅仅含素因子3,5,7 的第 k 大的数. 符合条件的数如:3.5.7,9,15...... 您在真实的面试中是否遇到过这个题? Yes 例子 假设k=4, 返回 9 挑战 要求时间 ...

  2. xcode 6 改动组织及开发人员

    搞个ios 开发死去活来的,各个地方说的都不一样,defaults write 不好用 在xcode6中 改动方法例如以下 改动create by __FULLUSERNAME___ 部分 Syste ...

  3. 【quickhybrid】API多平台支撑的实现

    前言 在框架规划时,就有提到过这个框架的一些常用功能需要支持H5环境下的调用,也就是需要实现API的多平台支撑 为什么要多平台支撑?核心仍然是复用代码,比如在微信下,在钉钉下,在quick容器下, 如 ...

  4. jquery 自定义选择器

    // HTML 代码 <body> <div id="divid1" class="divclass">白色</div> & ...

  5. MPSOC之8——启动及错误处理

    有了BOOT.BIN(fsbl+pmu+atl+uboot).uImage.uramdisk.image.gz,dtb文件,就可以启动了.把上述文件统统拷贝到SD卡,并设置开发板为SD卡启动. 0. ...

  6. ERR Unsupported CONFIG parameter: notify-keyspace-events; nested exception is redis.clients.jedis.exceptions.JedisDataException

    异常信息 时间:2017-04-05 15:53:57,361 - 级别:[ WARN] - 消息: [other] The web application [ROOT] appears to hav ...

  7. Java实现的电脑已连接WiFi热点的导入导出小工具

    很多时候我们电脑连接了很多无线WiFi,只要连接过一次,电脑就会记下该热点的密码,方便我们下一次连接.但是问题来了,一旦我们重装系统,之前连接过的WiFi就丢失了,想要连接就得再输入密码,为了 解决这 ...

  8. 快看Sample代码,速学Swift语言(2)-基础介绍

    Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或者Objective-C的开发经验获得一种熟悉感.Swif ...

  9. mac下配置caffe

    Step1:安装homebrew 如果电脑上有,暂时不装.但是在step2(或者其他需要brew的情况)加完sudo之后如果仍然报错,就需要重新安装homebrew.在终端里输入如下命令: ruby  ...

  10. Xamarin Android自定义文本框

    xamarin android 自定义文本框简单的用法 关键点在于,监听EditText的内容变化,不同于java中文本内容变化去调用EditText.addTextChangedListener(m ...