【最短路·差分约束】洛谷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, ...
随机推荐
- Office Add-in 设计规范与最佳实践
作者:陈希章 发表于 2017年8月6日 引子 离上一篇Office Add-in的文章已经过去了一段时间,期间有去年Office 365 Asia Devday & Hackathon的二等 ...
- [转]压缩感知重构算法之分段正交匹配追踪(StOMP)
分段正交匹配追踪(StagewiseOMP)或者翻译为逐步正交匹配追踪,它是OMP另一种改进算法,每次迭代可以选择多个原子.此算法的输入参数中没有信号稀疏度K,因此相比于ROMP及CoSaMP有独到的 ...
- java注解细节
现在很多框架都使用注解了,典型的像Spring里面就可以看到大量的注解,比如@Service,@Controller这一类的都是注解.注解Annotation是java一项很重要的功能.下面就来整理一 ...
- GET请求/百度贴吧 有bug
# -*- coding:utf-8 -*- import urllib, urllib2 import re import sys class Cuzz(): """这 ...
- jvm系列(十一):JVM演讲PPT分享
JVM PPT的演进文稿分享 此PPT长达46页,不方便在页面中全部展示,文中只展示了文稿的前十二页. 获取完整版请在公众号内回复"JVM".
- 函数PYXX_READ_PAYROLL_RESULT的dump问题
发现有两个HR的后台定时任务出现dump,日志表示,是PYXX_READ_PAYROLL_RESULT产生了类型冲突的异常CX_SY_DYN_CALL_ILLEGAL_TYPE. 日志标题部分: 类别 ...
- bzoj 4199 [NOI2015]寿司晚宴
Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...
- Cleaner, more elegant, and harder to recognize (msdn blog)
It appears that some people interpreted the title of one of my rants from many months ago, "Cle ...
- Handwritten Parsers & Lexers in Go (翻译)
用go实现Parsers & Lexers 在当今网络应用和REST API的时代,编写解析器似乎是一种垂死的艺术.你可能会认为编写解析器是一个复杂的工作,只保留给编程语言设计师,但我想消除这 ...
- Linux发行版 CentOS6.5下删除分区操作
本文地址http://comexchan.cnblogs.com/,作者Comex Chan,尊重知识产权,转载请注明出处,谢谢! 有时候,发现分区分错了.需要删除分区,只需按照分区的步骤逆向操作 ...