【最短路·差分约束】洛谷P1250
题目描述
一条街的一边有几座房子。因为环保原因居民想要在路边种些树。路边的地区被分割成块,并被编号成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。
输出格式:
输出文件只有一行写有树的数目
输入输出样例
9
4
1 4 2
4 6 2
8 9 2
3 5 2
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的更多相关文章
- 题解——洛谷P1250 种树(差分约束)
一道看一眼就知道差分约束的题目 但是最短路spfa的时候注意松弛条件是 if(dis[u]+w[i]<dis[v[i]]) dis[v[i]]=dis[u]+w[i]; 不能写成 if(dis[ ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- Candies POJ - 3159 (最短路+差分约束)
During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher b ...
- 转载 - 最短路&差分约束题集
出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★ ...
- 最短路 & 差分约束 总结
一.引例 1.一类不等式组的解 二.最短路 1.Dijkstra 2.图的存储 3.链式前向星 4.Dijkstra + 优先队列 ...
- S - Layout (最短路&&差分约束)
Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 < ...
- K - Candies(最短路+差分约束)
题目大意:给N个小屁孩分糖果,每个小屁孩都有一个期望,比如A最多比B多C个,再多了就不行了,会打架的,求N最多比1多几块糖 分析:就是求一个极小极大值...试试看 这里需要用到一个查分约束的东西 下面 ...
- HDU 1384 Intervals &洛谷[P1250]种树
差分约束 差分约束的裸题,关键在于如何建图 我们可以把题目中给出的区间端点作为图上的点,此处应注意,由于区间中被标记的点的个数满足区间加法,这里与前缀和类似,对于区间[L..R]来说,我们加入一条从L ...
- 洛谷P1250种树(贪心)
题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E, ...
随机推荐
- dynamic programming 学习
这是看到一位大神,写的关于dynamic programming的博客,认为很好.简单分析下.然后给出链接. 背景问题就是 有一个国家,全部的国民都很老实憨厚,某天他们在自己的国家发现了十座金矿.而且 ...
- android项目 之 记事本(11) ----- 加入数据库
本文是自己学习所做笔记.欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 通过之前的10节,已实现了记事本的大部分功能,有加入拍照.加入照片,加入录音,加 ...
- x86内存映射
Contents 1 "Low" memory (< 1 MiB) 1.1 Overview 1.2 BIOS Data Area (BDA) 1.3 Extended BI ...
- AB串
题目: 给定n个A和2n个B.用这些字符拼成一个字符串.要求这个串的全部前缀和后缀B的个数始终不少于A. (一个字符串的前缀是仅仅从开头到某个位置为止的子串,后缀是仅仅从某个位置到结尾的子串). 输入 ...
- Fiddler使用总结一(使用Fiddler捕获手机所有http/https通信)
与后端数据通信是前端日常开发的重要一环,在与后端接口联调的时候往往需要通过查看后端返回的数据进行调试.如果在PC端,Chrome自带的DevTools就已经足够用了,Network面板可以记录所有网络 ...
- 【SqlServer】【问题收集】必须声明标量变量
1 问题概述 在DAL层,通过标量给变量赋值时,出现如下异常 我们来看看在数据访问层的SQL语句: //根据EmployeeName条件获取数据 public DataTable GetEmplo ...
- TempData知多少
网上对TempData的总结为: 保存在session中,Controller每次执行请求时,会从session中一次获取所有tempdata数据,保存在单独的内部数据字典中,而后从session中清 ...
- springboot+多数据源配置
作者:纯洁的微笑 出处:http://www.ityouknow.com/ 起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务.我们项目是后者的模式,网上找了很多 ...
- TypeScript学习笔记之类
TypeScript的类,简单地定义如下: class Person { x: number; // 默认为public类型 y: number; constructor(x1: number, y1 ...
- 配置nginx支持path_info模式
简介:我们用thinkphp,CodeIgniter框架的时候,地址基本都是IP/index.php/group_controller?***的模式,通过index.php入口访问php文件 这种模式 ...