Southwestern Europe 2002,题面可参考 POJ 1201

给定 n 个闭区间 [a_i,b_i] 和 n 个整数c_i 。你需要构造一个整数集合Z ,使得对于任意i (1<=i<=n),Z 中满足 a_i<=x<=b_i 的整数 x 不少于 c_i 个,求这样的整数集合 Z 最少包含多少个数。

简而言之就是,从 0~5E4 中选出尽量少的整数,使每个区间 [a_i,b_i] 内都有至少 c_i 个数被选出。

输入格式

第一行一个整数 n,表示区间个数;

以下 n 行每行描述这些区间,第 i+1 行三个整数 a_i,b_i,c_i,由空格隔开。

输出格式

一行,输出满足要求的序列最少整数个数。

样例
输入复制
5
3 7 3
8 10 3
6 8 1
1 3 1
10 11 1
输出复制
6
 
数据范围与提示

对于全部数据,1<=n<=5e4,0<=a_i,b_i<=5e4。

______________________________________

区间型差分约束

________________________________________

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=5e4+10;
4 struct edge
5 {
6 int u,v,w,nxt;
7 }e[maxn<<2];
8 int head[maxn],js;
9 void addage(int u,int v,int w)
10 {
11 e[++js].u=u,e[js].v=v;e[js].w=w;
12 e[js].nxt=head[u];head[u]=js;
13 }
14 int n;
15 int dis[maxn];
16 bool inq[maxn];
17 deque<int>q;
18
19 int spfa(int u)
20 {
21 q.push_back(u);
22 memset(dis,0xff,sizeof dis);
23 inq[u]=1;
24 dis[u]=0;
25 while(!q.empty())
26 {
27 int u=q.front();q.pop_front();
28 inq[u]=0;
29 for(int i=head[u];i;i=e[i].nxt)
30 {
31 int w=e[i].w,v=e[i].v;
32 if(dis[u]+w>dis[v])
33 {
34 dis[v]=dis[u]+w;
35 if(!inq[v])
36 {
37 if(!q.empty() && dis[q.front()]<dis[v])q.push_front(v);
38 else q.push_back(v);
39 inq[v]=1;
40 }
41 }
42 }
43 }
44 return dis[50001];
45 }
46 int main()
47 {
48 scanf("%d",&n);
49 for(int a,b,c,i=0;i<n;++i)
50 {
51 scanf("%d%d%d",&a,&b,&c);
52 addage(a,b+1,c);
53 }
54 for(int i=1;i<=50001;++i)
55 {
56 addage(i-1,i,0);
57 addage(i,i-1,-1);
58 }
59 cout<<spfa(0);
60
61 return 0;
62 }

loj10087的更多相关文章

  1. loj10087 Intervals

    传送门 分析 我们设S[i]表示到第i个数为止一共有多少个数在集合Z之中,最终答案就是S[max]-S[min]的最小值.所以我们不难发现对于每一个[ai,bi]都表示S[bi]-S[ai-1]> ...

随机推荐

  1. Spring Boot面试杀手锏————自动配置原理

    转:https://blog.csdn.net/u014745069/article/details/83820511 引言不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技 ...

  2. python对离散数据进行编码

    机器学习中会遇到一些离散型数据,无法带入模型进行训练,所以要对其进行编码,常用的编码方式有两种: 1.特征不具备大小意义的直接独热编码(one-hot encoding) 2.特征有大小意义的采用映射 ...

  3. [LeetCode]Minimum Moves to Equal Array Elements1,2

    1.将每次n-1个数+1,转化为每次最大的数-1 public int minMoves(int[] nums) { /* 看了看答案 ,很巧妙,最后的结果肯定是把数组元素都加到一个相同的值, 也就是 ...

  4. Js HTML DOM动画

    基础页面 为了演示如何通过 JavaScript 来创建 html 动画,我们将使用一张简单的网页: 实例 我的第一部 JavaScript 动画 我的动画在这里. 创建动画容器 所有动画都应该与容器 ...

  5. python图片的读取保存

    #coding:utf-8 from PIL import Image import matplotlib.pyplot as plt img=Image.open("F:\\Upan\\源 ...

  6. 数据库索引的基石----B树

    数据结构相对来说比较枯燥, 我尽量用最易懂的话,来把B树讲清楚.学过数据结构的人都接触过一个概念二叉树,简单来说,就是每个父节点最多有两个子节点.为了在二叉树上更快的进行元素的查找,人们通过不断的改进 ...

  7. Liunx运维(十)-网络管理命令

    文档目录: 一.ifconfig:配置或显示网络接口信息 二.ifup:激活网络接口 三.ifdown:禁用网络接口 四.route:显示或管理理由表 五.arp:管理系统的arp缓存 六.ip:网络 ...

  8. TeamView WaitforConnectFailed错误原因

    更新到最新版本并重启如下服务 检查TCP IPV4是否选中

  9. Solon rpc 之 SocketD 协议 - RPC鉴权模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  10. new ArrayList(0) 和 new ArrayList() 和一样吗?

    第一感觉是一样的,盲猜后者调用了前者,并传入参数 0.然而,无论是 JDK 7 还是 JDK 8,这两个方法构造的结果都是不一样的.JDK 开发人员在这方面作了优化. JDK 7 在 Java 7 中 ...