题意:

     给你n个区间,每个区间最少取两个元素,问你所有区间最少取几个元素(可以满足
每个区间最少两个元素)。

思路:

     这个题目感觉挺巧妙的,之前在杭电上做过这个题目,这个题目可以用查分约束来做
,对于每一个区间a,b我们可以这样 b - a >= 2 那么建图a->b 长度是2,全建完之后不要忘记题目的隐含条件,查分约束中隐含条件很重要,这个题目的隐含条件就是相邻的两个点之间的个数大于等于0,小于等于1,也就是 
0 =< i - (i - 1) <= 1,然后拆成两部分,
对于i - (i - 1) >= 0  建立 (i - 1)-> i 长度0,对于i - (i - 1) <= 1先转换成 (i - 1) - i >= -1 建立 i -> (i - 1) 长度是-1,然后以最小点为起点一边最长路,在查分约束中要记住,求最小就跑最长路,求最大就跑最短路,其他的没啥。

#include<stdio.h>

#include<string.h>

#include<queue>

#define N_node 11000

#define N_edge 33000

#define INF 1000000000

using namespace std;

typedef struct

{

   int to ,next ,cost;

}STAR;

STAR E[N_edge];

int list[N_node] ,tot;

int mark[N_node] ,mki[N_node] ,s_x[N_node];

void add(int a ,int b ,int c)

{

     E[++tot].to = b;

     E[tot].cost = c;

     E[tot].next = list[a];

     list[a] = tot;

}

bool spfa(int s ,int n)

{

   for(int i = 0 ;i <= n ;i ++)

   s_x[i] = -INF ,mark[i] = mki[i] = 0;

   queue<int>q;

   q.push(s);

   s_x[s] = 0 ,mark[s] = mki[s] = 1;

   while(!q.empty())

   {

      int xin ,tou;

      tou = q.front();

      q.pop();

      mark[tou] = 0;

      for(int k = list[tou] ;k ;k = E[k].next)

      {

          xin = E[k].to;

          if(s_x[xin] < s_x[tou] + E[k].cost)

          {

             s_x[xin] = s_x[tou] + E[k].cost;

             if(!mark[xin])

             {

                mark[xin] = 1;

                if(++mki[xin] > n) return 0;

                q.push(xin);

             }

           }

       }

   }

   return 1;

}

int main ()

{

    int i ,a ,b ,n ,Min ,Max;

    while(~scanf("%d" ,&n))

    {

       Min = INF ,Max = -INF;

       memset(list ,0 ,sizeof(list)) ,tot = 1;

       for(i = 1 ;i <= n ;i ++)

       {

          scanf("%d %d" ,&a ,&b);

          b++;

          if(Min > a) Min = a;

          if(Max < b) Max = b;

          add(a ,b ,2);

       }

       for(i = Min ;i <= Max ;i ++)

       add(i - 1 ,i ,0) ,add(i ,i - 1 ,-1);

       spfa(Min ,Max);

       printf("%d\n" ,s_x[Max]);

    }

    return 0;

}

      

POJ 1716 区间最小点个数的更多相关文章

  1. POJ 3252 区间内一个数的二进制中0的数量要不能少于1的数量(数位DP)

    题意:求区间内二进制中0的数量要不能少于1的数量 分析:很明显的是数位DP: 菜鸟me : 整体上是和数位dp模板差不多的 , 需要注意的是这里有前导零的影响 , 所以需要在dfs()里面增加zor ...

  2. POJ 3171 区间最小花费覆盖 (DP+线段树

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4245   Accepted: 1429 D ...

  3. POJ 1201 Intervals || POJ 1716 Integer Intervals 差分约束

    POJ 1201 http://poj.org/problem?id=1201 题目大意: 有一个序列,题目用n个整数组合 [ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai, ...

  4. 【POJ 1716】Integer Intervals(差分约束系统)

    id=1716">[POJ 1716]Integer Intervals(差分约束系统) Integer Intervals Time Limit: 1000MS   Memory L ...

  5. 【学习笔记】RMQ-Range Minimum/Maximum Query (区间最小/最大值)

    RMQ是一类询问区间最小/最大值的问题. 这类问题一般分成两类:静态区间(无修改),动态区间(带修改). 对于动态区间查询最大/最小,我们显然可以用线段树来解决…… 那么对于静态区间查询最大/最小的问 ...

  6. 求n个数中的最大或最小k个数

    //求n个数中的最小k个数        public static void TestMin(int k, int n)        {            Random rd = new Ra ...

  7. SPOJ CNTPRIME 13015 Counting Primes (水题,区间更新,求区间的素数个数)

    题目连接:http://www.spoj.com/problems/CNTPRIME/ #include <iostream> #include <stdio.h> #incl ...

  8. nyoj 678 最小K个数之和

    最小K个数之和 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 输入n个整数,输出其中最小的K个数之和.例如输入4,5,1,1,6,2,7,3,3这9个数字,当k=4 ...

  9. POJ 3356 AGTC(最小编辑距离)

    POJ 3356 AGTC(最小编辑距离) http://poj.org/problem?id=3356 题意: 给出两个字符串x 与 y,当中x的长度为n,y的长度为m,而且m>=n.然后y能 ...

随机推荐

  1. 剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 Offer 22 常规解法 常规解法其实很容易可以想到,只需要先求出链表的长度,然后再次遍历取指定长度的链接即可. package com.walega ...

  2. web服务器-并发服务器2

    阅读目录 1.Web静态服务器-5-非堵塞模式 2.Web静态服务器-6-epoll 3.Web静态服务器-7-gevent版 4.知识扩展-C10K问题 一.Web静态服务器-5-非堵塞模式 单进程 ...

  3. JS动态获取select中被选中的option的值,并在控制台输出

    生活城市: <select id="province"> <option>河南省</option> <option>黑龙江省< ...

  4. SQL 性能起飞了!

    直接上干货 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及order by涉及的列上建立索引. 应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值 ...

  5. XUPT-D

    /*     泰泰学长又来玩数字了,泰泰学长想让你帮他求1-n的和,但是这次的求和可不是简单的1+2+...+n. 这次的求和是这样的,如果加到一个数字是2的指数倍,那就不加,反而减掉这个数.    ...

  6. Memory Networks02 记忆网络经典论文

    目录 1 Recurrent Entity Network Introduction 模型构建 Input Encoder Dynamic Memory Output Model 总结 2 hiera ...

  7. flutter资料

    Flutter社区和资源传送门 新: 慕课网<Flutter入门与案例实战>   |   中文网<Flutter实战>电子书 字体图标生成 http://fluttericon ...

  8. Django分页器组建

    class Pagination(object): def __init__(self,current_page,all_count,per_page_num=2,pager_count=11): & ...

  9. 让JS代码Level提升的忍者秘籍(实用)

    本文章共2377字,预计阅读时间5-10分钟. 前言 没有前言. 你准备好成为同事眼中深藏不露.高深莫测.阳光帅气的前端开发了吗? 那就开始吧! 本文秉承宗旨:代码实用与逼格并存. 提升JS代码Lev ...

  10. 4、MyBatis教程之配置解析

    5.配置解析 核心配置文件 mybatis-config.xml 系统核心配置文件 MyBatis 的配置文件会深深影响 MyBatis 行为的设置和属性信息. 能配置的内容如下: configura ...