题意: 知道了数轴上的n个区间,每个区间都是连续的int区间,现在要在数轴上任意取一堆元素,构成一个元素集合V要求每个区间和元素集合V的交集至少有两个不同的元素

求集合V最小的元素个数。

转一分析:(差分约束)

设s[x] = 从0 到x 的所有在集合中的数的个数

则ai到bi的个数即S[bi] - S[ai-1]。
因此有

(1) S[bi] - S[ai-1] >= 2。

又根据s[x]本身的性质,
后面的一定不比前面的小,后面的最多比前面多一,有:
(2)  s[i + 1] - s[i] >= 0
(3)  s[i + 1] - s[i] <= 1
故建图,使图中每一组边,均满足(注意三条式子的不等号方向要一致,这个很重要):
S[ai - 1] <= S[bi] - 2
S[i] <= S[i - 1] + 1
S[i - 1] <= S[i]

上面三式,可把s[x]看作源点(假设存在)到各点的最短距离,初始化为0;

常数为边(ai – 1,bi)的边权
当存在不满足这三条式子的边时,对这条边进行Relax操作,更新不等号左边的变量

其实就是Bellman-Ford算法的核心部分

if( S[ai - 1] > S[bi] – 2 )   S[ai - 1] = S[bi] – 2 ;

if( S[i] > S[i - 1] + 1 )   S[i] > S[i - 1] + 1 ;

if( S[i - 1] > S[i] )   S[i - 1] = S[i] ;

最后源点到最大顶点的距离减去源点到最小顶点的距离就是所求(其实一个单位距离就代表V中的一个元素;最小顶点到最大顶点其实就是所有输入的区间中,最小的左端点到最大的右端点这个范围)。

#include<stdio.h>
#include<string.h>
#define INF 0x1f1f1f1f
struct node
{int s,e;
}q[10001];
int dis[10001];
int n;
int low,high;
int main()
{int a,b,i,flag;while(scanf("%d",&n)!=EOF){low=INF;high=0;for(i=0;i<n;i++){scanf("%d%d",&a,&b);q[i].s=a;q[i].e=b+1;if(q[i].s<low)low=q[i].s;if(q[i].e>high)high=q[i].e;dis[i]=0;}flag=1;while(flag){flag=0;for(i=0;i<n;i++)if(dis[q[i].s]>dis[q[i].e]-2){dis[q[i].s]=dis[q[i].e]-2;flag=1;}for(i=low;i<high;i++)if(dis[i+1]>dis[i]+1){dis[i+1]=dis[i]+1;flag=1;}for(i=high-1;i>=low;i--)if(dis[i]>dis[i+1]){dis[i]=dis[i+1];flag=1;}}printf("%d\n",dis[high]-dis[low]);}return 0;
}

转载于:https://www.cnblogs.com/dream-wind/archive/2012/08/13/2637190.html

POJ 1716 Integer Intervals【差分约束】相关推荐

  1. POJ 1716 Integer Intervals 差分约束

    题目:http://poj.org/problem?id=1716 1 #include <stdio.h> 2 #include <string.h> 3 #include ...

  2. POJ 1716 Integer Intervals

    POJ_1716 由于有了前面几个题目的基础,解答这个题目的过程还算顺利.我们设S[i]为区间[0,i)内选取的数字的数量,那么有①S[b+1]-S[a]>=2,②S[i+1]-S[i]> ...

  3. poj 1201 Intervals 差分约束

    真 .读题杀,英文题一脸懵逼,看来以后还要多读读英文题,不过读完了就能发现这其实是一道很裸的差分约束,按照题意建边即可,但还要注意的就是后一个要大于等于前一个,并且每个位置不能超过一个元素.求一边最大 ...

  4. POJ 3159 Candies(差分约束+SPAF)

    题意: 给n个小朋友分发糖果,但小朋友们之间有嫉妒心.接下来m行,每行三个数,分别表示小朋友A希望B得到的糖果不能比他多x个.要求你计算在满足所有小朋友的条件的情况下最多需要准备多少颗糖. 题目: D ...

  5. poj1201/zoj1508/hdu1384 Intervals(差分约束)

    转载请注明出处: http://www.cnblogs.com/fraud/           --by fraud Intervals Time Limit: 10 Seconds      Me ...

  6. poj-1201 Intervals(差分约束)

    题目链接: Intervals Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24379   Accepted: 9274 ...

  7. POJ - 3169 SPFA解差分约束除了有解,负环还有另一种情况

    题意就是有N头牛排成一个直线..有些牛之间互相讨厌..距离必须大于等于某个...有些牛之间相互暧昧..距离必须小于等于某个...牛的前后顺序和编号是一样的...问这些牛最多能排多长.. 比较传统的SP ...

  8. POJ - 1201 Intervals(差分约束+最短路)

    题目链接:点击查看 题目大意:给定n个闭区间[ai,bi]和n个整数ci,你需要构造一个整数集合Z,使得Z中满足所有的ai<=x<=bi的整数不少于ci个,求出这样的整数集合Z最少包含多少 ...

  9. POJ 1201 amp; HDU1384 amp; ZOJ 1508 Intervals(差分约束+spfa 求最长路径)

    题目链接: POJ:http://poj.org/problem?id=1201 HDU:http://acm.hdu.edu.cn/showproblem.php? pid=1384 ZOJ:htt ...

最新文章

  1. __iter__ 和 __next__
  2. NLP:对字符串按照一个、多个自定义分隔符进行分割、将列表转为字符串同时自定义连接符
  3. Java集合篇:Hashtable原理详解(JDK1.8)
  4. Angular 页面元素的DOM级别的删除过程
  5. 实例35:python
  6. (转)Hibernate框架基础——cascade属性
  7. java和c++的区别大吗_莫桑钻和钻石外观区别大吗 莫桑钻和真的钻石有什么区别...
  8. scala单例object与伴生object入门
  9. 2018八大流行网页设计趋势
  10. Redis集群:./redis-trib.rb:24:in `require': no such file to load -- rubygems
  11. A40I led driver
  12. 估值调整 - 时间调整
  13. 稀疏表示中KL1p库的配置及Demo
  14. 最新:亚马逊运营思路
  15. IPEmotion数据处理-分类元件的灵活运用——车辆制动次数的多样计算
  16. RPC框架Kitex入门
  17. 为什么建议大家使用 Linux 开发?有那么爽吗?
  18. SparkSQL之“Dataset和Dataframe
  19. PaddleOCR使用笔记之模型训练
  20. 在html文件中 url是统一资源定位器,HTML URL(统一资源定位器)

热门文章

  1. Linux运行shell脚本出现出错,可能是环境编码不一致造成的。
  2. Tex, LaTex概念及实例
  3. 1.5 本地库与中央库
  4. [设计模式-行为型]访问者模式(Vistor)
  5. android 定时器 坑,Android 记录一个使用AlarmManager的坑。
  6. php判断字段重复,删除完全重复和部分关键字段重复的记录
  7. easyui-combobox 模糊匹配 支持汉字和拼音_巧用数据验证制作模糊匹配的下拉列表...
  8. python多进程卡死_Python 多进程中使用logging导致死锁
  9. 基于matlab的2ask频带传输系统仿真与性能分析,基于MATLAB的2ASK频带传输系统仿真与性能分析汇总...
  10. 树莓派备份系统sd卡备份