题目描述
给定n个闭区间[ai,bi]和n个整数ci。你需要构造一个整数集合Z,使得对于任意i,Z中满足ai<=x<=bi的x不少于ci个。求Z集合中包含的元素个数的最小值。 
输入
第一行为一个整数n(1<=n<=50000) 
接下来n行每行描述一个区间,三个整数分别表示ai,bi和ci。( 0 <= ai <= bi <= 50000 并且 1 <= ci <= bi - ai+1.) 
输出
输出一个整数,表示Z中包含元素个数的最小值。
样例输入
5
3 7 3
8 10 3
6 8 1
1 3 1
10 11 1
样例输出
6

由题意我们可以知道
b[i]-a[i]+1>=c[i]
两边同时除以-1,
a[i]-1-b[i]<=-c[i]
a[i]<=(b[i]+1)+(-c[i])
这个式子很熟悉有没有?
如果没有,看这个
d[i]<=d[j]+edge(j,i)
记得这个吗?对于一个无法松弛的单源最短路图,必满足上述关系

所以我们在最短路中把(j,i)连边 在本题中将(b[i]+1,a[i])连边 该过程称为差分约束
用d[i]表示从0-i区间中需要选的数
但是应当注意的是 明显d[0]不一定=0 所以我们需要一个虚拟点作为原点
怎样找这个虚拟点?因为前面有一个(b[i]+1),当b[i]=max(b[i])时该值最大 所以最短路应当以max(b[i])为原点进行
由题意,在i至i+1区间中,最多选1个数,最少选0个数
于是得到0<=d[i+1]-d[i]<=1 所以同理我们将(i,i-1,0,)以及(i-1,i,1)连边
最后算出d[max(b[i])]即可
上代码
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int n,head[],num,a[],b[],c[],d[],vst[];
struct edge
{
int u,v,c,nxt;
}e[];
void add(int u,int v,int c)
{
e[++num].u=u,e[num].v=v,e[num].c=c;
e[num].nxt=head[u],head[u]=num;
}
void spfa(int x)
{
queue<int> q;
memset(d,,sizeof d);
q.push(x);
d[x]=;
vst[x]=;
while(!q.empty())
{
int xx=q.front();
q.pop();
vst[xx]=;
for(int st=head[xx];st!=-;st=e[st].nxt)
{
if(d[e[st].v]>e[st].c+d[xx])
{
d[e[st].v]=e[st].c+d[xx];
if(!vst[e[st].v])q.push(e[st].v),vst[e[st].v]=;
}
}
}
}
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
memset(head,-,sizeof head);
scanf("%d",&n);
int m=-0x3f3f3f3f;
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&a[i],&b[i],&c[i]);
add(b[i]+,a[i],-c[i]);
m=max(m,b[i]+);
}
for(int i=;i<=m;i++)
{
add(i,i-,);
add(i-,i,);
}
// for(int i=1;i<=m;i++)
// add(50005,i,0);
// for(int i=1;i<=num;i++)
// printf("%d %d\n",e[i].u,e[i].v);
spfa(m);
int minn=0x3f3f3f3f;
//for(int i=1;i<=m;i++)minn=min(minn,d[i]);
printf("%d",-d[]/*-minn*/);
return ;
}

 

2019暑假集训 Intervals的更多相关文章

  1. 2019暑假集训 BLO

    题目描述 Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. 输入 输入n<=100000 ...

  2. 2019暑假集训 windy数

    题目描述 Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为2的正整数被称为 Windy 数. Windy 想知道,在A和B之间,包括A和B,总共有多少个 Windy 数? 输 ...

  3. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  4. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  5. 暑假集训Day2 互不侵犯(状压dp)

    这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...

  6. 暑假集训Day1 整数划分

    题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...

  7. 2013ACM暑假集训总结-致将走上大三征途的我

    回想起这个暑假,从开始与雄鹰一起的纠结要不要进集训队,与吉吉博博组队参加地大邀请赛,害怕进不了集训队.当时激励我月份开始接触的,记得当时在弄运动会来着,然后就问了雄鹰一些输入输出的东西,怀着满心的期待 ...

  8. [补档]暑假集训D5总结

    %dalao 今天又有dalao来讲课,讲的是网络流 网络流--从入门到放弃:7-29dalao讲课笔记--https://hzoi-mafia.github.io/2017/07/29/27/   ...

  9. [补档]暑假集训D1总结

    归来 今天就这样回来了,虽然心里极其不想回来(暑假!@#的只有一天啊喂),但还是回来了,没办法,虽然不喜欢这个地方,但是机房却也是少数能给我安慰的地方,心再累,也没有办法了,不如好好集训= = %da ...

随机推荐

  1. 应用ImageJ对荧光图片进行半定量分析

    原文 应用ImageJ对荧光图片进行半定量分析 前言ImageJ是个好东西……(省略1000字)总地来说对我们的好处是:1.免费2.多功能,基本功能就很多,加上插件可以说得上是无限多(前提是你找得到, ...

  2. Win10《芒果TV》商店版更新v3.2.7:修复下载任务和会员下载权限异常

    在第89届奥斯卡颁奖典礼,<爱乐之城>摘获最佳导演.女主.摄影等六项大奖,<月光男孩>爆冷获最佳影片之际,Win10版<芒果TV>迅速更新至v3.2.7,主要是修复 ...

  3. ORA-02085: database link string connect to string

    ORA-02085: database link string connects to string Cause: a database link connected to a database wi ...

  4. React Native v0.4 发布,用 React 编写移动应用

    React Native v0.4 发布,自从 React Native 开源以来,包括超过 12.5k stars,1000 commits,500 issues,380 pull requests ...

  5. 支付宝RSA签名之Delphi实现

    Delphi有个很大的问题就是,厂商的不作为(没有封装标准的Cipher类库),让大家自己造轮子. 今天的轮子就是RSA签名,由于Delphi没有封装Cipher类库,所以只的自己写了. 因为要在Fi ...

  6. C++开源库,欢迎补充

    C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用.当Java横行天下之后,MS又突然发力,搞出C#语 ...

  7. MotionManager 陀螺仪实现方式

      题外话:   权利的游戏开播了,引用一句话:   布兰:一个人如果还把,他还能勇敢么?   奈德:人在害怕时候的勇敢,才是真的勇敢.     回归正题:   说下关于 CMMotionManage ...

  8. Java开发桌面程序学习(十)——css样式表使用以及Button悬浮改变样式实现

    css样式表使用 javafx中的css样式,与html的有些不一样,javafx中的css,是以-fx-background-color这种样子的,具体可以参考文档JavaFx css官方文档 ja ...

  9. NumPy基础操作

    NumPy基础操作(1) (注:记得在文件开头导入import numpy as np) 目录: 数组的创建 强制类型转换与切片 布尔型索引 结语 数组的创建 相关函数 np.array(), np. ...

  10. 面试中的作用域题和THIS 指向的问题

    作用域的面试题 1. fn() function fn () { console.log(12) } var as = function () { console.log(45) } 2. var a ...