1653 种树 2

1653 种树 2

时间限制: 1 s

空间限制: 256000 KB

题目等级 : 钻石 Diamond

题解

题目描述 Description

一条街的一边有几座房子。因为环保原因居民想要在路边种些树。路边的地区被分割成块,并被编号为1…n。每个块的大小为一个单位尺寸并最多可种一裸树。每个居民想在门前种些树并指定了三个号码b,e,t。这三个数表示该居民想在b和e之间最少种t棵树。当然,b≤e,居民必须保证在指定地区不能种多于地区被分割成块数的树,即要求T≤ e-b+1。允许居民想种树的各自区域可以交叉。出于资金短缺的原因,环保部门请你求出能够满足所有居民的要求,需要种树的最少数量。

输入描述 Input Description

第一行为n,表示区域的个数;

第二行为h,表示房子的数目;

下面h行描述居民的需要:bet(0<b≤30000,r ≤e-b+ 1)分别用一个空格分开。

输出描述 Output Description

输出为满足所有要求的最少树的数量。

样例输入 Sample Input

9

4

1 4 2

4 6 2

8 9 2

3 5 2

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

【数据规模】

30%的数据满足0<n ≤1000,0<h ≤ 500; 100%的数据满足n ≤30000,h ≤5000。

分类标签 Tags 点此展开

暂无标签

题解:

这是种树3的弱化版

见:http://www.cnblogs.com/shenben/p/5880329.html

AC代码:

#include<cstdio>
#include<queue>
using namespace std;
const int N=5e5+10;
struct node{
    int v,w,next;
}e[N<<2];
int n,m,tot,head[N],k[N],dis[N];
bool vis[N];
inline const int read(){
    register int x=0,f=1;
    register char ch=getchar();
    while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
void add(int x,int y,int z){
    e[++tot].v=y;
    e[tot].w=z;
    e[tot].next=head[x];
    head[x]=tot;
}
inline int spfa(){
    for(int i=1;i<=n;i++) dis[i]=-0x3f3f3f3f;
    dis[0]=0;
    queue<int>q;
    q.push(0);
    vis[0]=1;
    while(!q.empty()){
        int h=q.front();q.pop();
        vis[h]=0;
        for(int i=head[h];i;i=e[i].next){
            int v=e[i].v,w=e[i].w;
            if(dis[v]<dis[h]+w){
                dis[v]=dis[h]+w;
                if(!vis[v]){
                    vis[v]=1;
                    q.push(v);
                }
            }
        }
    }
    return dis[n];
}
int main(){
    n=read();m=read();
    for(int i=1,a,b,c;i<=m;i++){
        a=read()-1;b=read();c=read();
        add(a,b,c);
    }
    for(int i=1;i<=n;i++){
        add(i-1,i,0);
        add(i,i-1,-1);
    }
    printf("%d\n",spfa());
    return 0;
}
时间: 2024-10-11 03:25:46

1653 种树 2的相关文章

种树(贪心)

2151: 种树 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 714  Solved: 397[Submit][Status][Discuss] Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n.并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度.但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i

【BZOJ 2151】 2151: 种树 (贪心+堆)

2151: 种树 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n.并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度.但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置.值得注意的是1号和n号也算相邻位置!).最终市政府给园林部门提供了m棵树苗并要求全部种上,请你帮忙设计种树方案使得美观度总和最大.如果无法将m棵树苗

雷军:做安卓平板生态 总要有人先种树

文/雷军 不少米粉一直都在呼吁我们做平板,在此之前市场上的Android平板也不少.但为什么小米创业四年后我们才开始做?因为平板是个非常难做的产品. 苹果CEO Tim Cook没少挖苦Android平板.去年他说, iPad占据了平板市场 81%的流量份额,众多Android平板加起来过 19%.前年他甚至还说过,所有的Android平板都在仓库里或者用户的抽屉里吃灰. 从硬件角度看,Android平板并不是很难做.市场上各类Android板满天飞,有的很贵要好几千元,也有很多性能很差的平板便

洛谷P1250种树(贪心)

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

1768 种树 3

1768 种树 3 2012年 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 为了绿化乡村,H村积极响应号召,开始种树了. H村里有n幢房屋,这些屋子的排列顺序很有特点,在一条直线上.于是方便起见,我们给它们标上1~n.树就种在房子前面的空地上. 同时,村民们向村长提出了m个意见,每个意见都是按如下格式:希望第li个房子到第ri个房子的房前至少有ci棵树. 因为每个房屋前的空地面积有限,所以每个房屋前

[swustoj 183] 种树

种树(0183) 问题描述 Aconly有一块矩形的地,因为这块地里有很多石头,耕作很不方便,所以他打算在这块地上种一些果树.这块地用一个只含‘#’和‘*’的N*M的矩阵来表示,‘#’表示泥土,‘*’表示石头.当然有石头的地方是不能种树的,而且任意两棵树之间不能离得太近,表现在矩阵中就是不能上.下.左.右.左上.右上.左下.右下八个方向相邻.你的任务就是帮助Aconly算出这块地最多可以种多少棵树. 输入 有多组测试数据.每组测试数据以两个整数N和M开头,随后有N行只含‘#’和‘*’的字符,每行

[Data Structure] 数据结构中各种树

数据结构中有很多树的结构,其中包括二叉树.二叉搜索树.2-3树.红黑树等等.本文中对数据结构中常见的几种树的概念和用途进行了汇总,不求严格精准,但求简单易懂. 1. 二叉树 二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构. 二叉树的定义:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒.二叉树的第i层至多有2i-1个结点:深度为k的二叉树至多有2k-1个结点:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=

BZOJ2151 种树

Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 565  Solved: 310[Submit][Status][Discuss] Description A 城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到 n.并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度.但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和 i+

[COGS1862]种树 解题报告

[问题描述] A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n.并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度.但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置.值得注意的是1号和n号也算相邻位置!). 最终市政府给园林部门提供了m棵树苗并要求全部种上,请你帮忙设计种树方案使得美观度总和最大.如果无法将m棵树苗全部种上,给出无解信息.