Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 28416   Accepted: 10966

Description

You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. 
Write a program that: 
reads the number of intervals, their end points and integers c1, ..., cn from the standard input, 
computes the minimal size of a set Z of integers which has at least ci common elements with interval [ai, bi], for each i=1,2,...,n, 
writes the answer to the standard output. 

Input

The first line of the input contains an integer n (1 <= n <= 50000) -- the number of intervals. The following n lines describe the intervals. The (i+1)-th line of the input contains three integers ai, bi and ci separated by single spaces and such that 0 <= ai <= bi <= 50000 and 1 <= ci <= bi - ai+1.

Output

The output contains exactly one integer equal to the minimal size of set Z sharing at least ci elements with interval [ai, bi], for each i=1,2,...,n.

Sample Input

5
3 7 3
8 10 3
6 8 1
1 3 1
10 11 1

Sample Output

6

Source

 
 
题意:每次给出一段区间$[a_i,b_i]$以及一个数$c_i$,使得在这中间至少有$c_i$个数,求一个最小的集合$Z$,使得集合$Z$满足上述所有要求,问集合$Z$的大小
 
 
 
思路:
设$S[i]$表示$0-i$这一段区间的前缀和
那么题目的关系就变成了$S[b_i]-S[a_i]>=c_i$
这是一个很典型的差分约束类问题
题目中要求集合最小,因此转换为最长路,将所有的式子写成$B-A>=C$的形式
同时题目中还有一个条件$0<=S[i]-S[i-1]<=1$
因为数据为整数
于是又得到两个方程
$S\left[ i\right] -S\left[ i-1\right] \geq 0$
$S\left[ i-1\right] -S\left[ i\right] \geq -1$
但是有个细节:$S[i-1]$不能表示,因此我们需要将所有下标$+1$,此时$S[i]$表示$0 to (i-1)$的前缀和
同时,这个图一定是联通的,因此不用新建超级源点
 
#include<cstdio>
#include<queue>
#include<cstring>
#define INF 1e8+10
using namespace std;
const int MAXN=1e6+;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,MAXN,stdin),p1==p2)?EOF:*p1++)
char buf[MAXN],*p1=buf,*p2=buf;
inline int read()
{
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
struct node
{
int u,v,w,nxt;
}edge[MAXN];
int head[MAXN],num=;
int maxx=-INF,minn=INF;
int dis[MAXN],vis[MAXN];
inline void AddEdge(int x,int y,int z)
{
edge[num].u=x;
edge[num].v=y;
edge[num].w=z;
edge[num].nxt=head[x];
head[x]=num++;
}
int SPFA()
{
queue<int>q;
memset(dis,-0xf,sizeof(dis));
dis[minn]=;q.push(minn);
while(q.size()!=)
{
int p=q.front();q.pop();
vis[p]=;
for(int i=head[p];i!=-;i=edge[i].nxt)
{
if(dis[edge[i].v]<dis[p]+edge[i].w)
{
dis[edge[i].v]=dis[p]+edge[i].w;
if(vis[edge[i].v]==)
vis[edge[i].v]=,q.push(edge[i].v);
}
}
}
printf("%d",dis[maxx]);
}
int main()
{
#ifdef WIN32
freopen("a.in","r",stdin);
#else
#endif
memset(head,-,sizeof(head));
int N=read();
for(int i=;i<=N;i++)
{
int x=read(),y=read(),z=read();
AddEdge(x,y+,z);
maxx=max(y+,maxx);
minn=min(x,minn);
}
for(int i=minn;i<=maxx-;i++)
{
AddEdge(i+,i,-);
AddEdge(i,i+,);
}
SPFA();
return ;
}

POJ1201 Intervals(差分约束)的更多相关文章

  1. poj1201 Intervals——差分约束

    题目:http://poj.org/problem?id=1201 差分约束裸题: 设 s[i] 表示到 i 选了数的个数前缀和: 根据题意,可以建立以下三个限制关系: s[bi] >= s[a ...

  2. hdu 1384 Intervals (差分约束)

    Intervals Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  3. poj 1716 Integer Intervals (差分约束 或 贪心)

    Integer Intervals Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12192   Accepted: 514 ...

  4. zoj 1508 Intervals (差分约束)

    Intervals Time Limit: 10 Seconds      Memory Limit: 32768 KB You are given n closed, integer interva ...

  5. poj 1201 Intervals(差分约束)

    题目:http://poj.org/problem?id=1201 题意:给定n组数据,每组有ai,bi,ci,要求在区间[ai,bi]内至少找ci个数, 并使得找的数字组成的数组Z的长度最小. #i ...

  6. poj 1201 Intervals——差分约束裸题

    题目:http://poj.org/problem?id=1201 差分约束裸套路:前缀和 本题可以不把源点向每个点连一条0的边,可以直接把0点作为源点.这样会快许多! 可能是因为 i-1 向 i 都 ...

  7. POJ1201基础差分约束

    题意:       有一条直线,直线上做多有50000个点,然后给你组关系 a b c表明a-b之间最少有c个点,问直线上最少多少个点. 思路:        a-b最少有c个点可以想象a到b+1的距 ...

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

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

  9. POJ1201 Intervals差分约束系统(最短路)

    Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p ...

随机推荐

  1. Redis学习笔记之位图

    目录 位图定义 应用场景 基本使用 查找统计 位图定义 位图并不是一种数据结构,其实就是一种普通的字符串,也可以说是byte数组.基本语法是setbit/getbit,刚才说了是一个byte数组,所以 ...

  2. 第七篇: 消息总线(Spring Cloud Bus)

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

  3. HTML百宝箱(1从0开始)

    标准格式(XHTML) l   元素必须正确嵌套 l   元素必须始终关闭 l   元素名和属性名必须小写 l   文档必须有且仅有一个根元素 l   属性值必须使用双引号括起来 l   声明文档为标 ...

  4. javascript数组的属性、方法和清空-最全!!!(必看)

    今天经理要我从新看一遍js,当我再看<精通js和jquery>这本书时,发现关于数组的这章节讲的很少,于是想自己总结一下数组的常用方法. 定义数组: var arr = new Array ...

  5. Java核心技术及面试指南 面向对象部分的面试题总结以及答案

    问题2.7.1,开放性问题,说一下你对面向对象思想的了解. 要点1,先说基础概念,比如面向对象思想包括封装.继承.多态,然后说些语法,比如可以通过extends继承类.通过implement来实现接口 ...

  6. c++中的左值与右值

    左值(lvalue)和右值(rvalue)是 c/c++ 中一个比较晦涩基础的概念,不少写了很久c/c++的人甚至没有听过这个名字,但这个概念到了 c++11 后却变得十分重要,它们是理解 move/ ...

  7. html2canvas关于图片不能正常截取

    问题 首先说说遇到了什么问题.首先有这么一个需求.需要前端根据后端传过来数据,动态的生成图片.图片中的文案.背景图片.用户头像全部都是通过后端的接口获取.但是使用 html2canvas 生成的can ...

  8. windows关闭占用某端口的进程

    第一步:获取该端口进程PID 第二步:获取该PID进程映像名称 第三部:关闭进程

  9. 【深度学习与TensorFlow 2.0】入门篇

    注:因为毕业论文需要用到相关知识,借着 TF 2.0 发布的时机,重新捡起深度学习.在此,也推荐一下优达学城与 TensorFlow 合作发布的TF 2.0入门课程,下面的例子就来自该课程. 原文发布 ...

  10. RPC框架--missian框架

    Missian简介 注:(创始者不明,应用于sina下面的公司(爱问)) Missian是一个构建于Mina和Hessian基础上的异步RPC框架,能够兼容HTTP协议和TCP协议,能和Hessian ...