题目描述

一条街的一边有几座房子。因为环保原因居民想要在路边种些树。路边的地区被分割成块,并被编号成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. 开发指南专题六:JEECG微云高速开发平台代码生成

    开发指南专题六:JEECG微云高速开发平台代码生 1.1. 代码生成扫描路径配置 用代码生成器生成代码后.须要进行相关配置配置,扫描注入control.service.entity等; 具体操作过程例 ...

  2. hdu 4109 dfs+剪枝优化

    求最久时间即在无环有向图里求最远路径 dfs+剪枝优化 从0节点(自己添加的)出发,0到1~n个节点之间的距离为1.mt[i]表示从0点到第i个节点眼下所得的最长路径 #include<iost ...

  3. Asp.net MVC 生成zip并下载

    前面有生成Excel或Word的示例,所以就不再重新写了. 这里只提供将指定文件以ZIP的方式下载. 创建一个 Zip工具类 public class ZIPCompressUtil { public ...

  4. TextMesh Pro SpriteAsset Load From Assetbundle

    遇到问题 我们项目分两个Unity的工程,Art(美术资源工程),Client(代码工程) 在Art工程中的TextMeshProUGUI Text中使用Emoji,打包成AB之后,在Client运行 ...

  5. Django的Models(三)

    ORM操作的一些进阶的方法: ################################################################## # PUBLIC METHODS T ...

  6. Spring:Bean生命周期

    关于Bean生命周期,我在网上找了两张图: 图1: 图2: 总结起来就是: Bean构建: Bean对象创建 > @Autowired | @Resource> @PostConstruc ...

  7. Intellij IDEA 安装和配置jrebel进行项目的热部署

    Jrebel 先介绍一下jrebel,jrebel是可以热部署项目的一个工具,更改代码自动部署并不需要重启项目(在spring中的controller中,增加.修改方法都是可以进行热部署而不需要重启的 ...

  8. gradle发布jar包

    在.gradle文件中添加以下代码 apply plugin: 'application' mainClassName = 'com.excel.ExcelApplication' jar { doF ...

  9. 浅谈Async/Await

    概要 在很长一段时间里面,FE们不得不依靠回调来处理异步代码.使用回调的结果是,代码变得很纠结,不便于理解与维护,值得庆幸的是Promise带来了.then(),让代码变得井然有序,便于管理.于是我们 ...

  10. 【java】扫描流Scanner接收输入示例

    多用Scanner少用InputStream 多用BufferedReader少用Reader 多用PrintStream少用OutputStream 多用PrintWriter少用Writer pa ...