POJ1201 区间
题目大意:
给定n个整数区间[ai,bi]和n个整数ci,求一个最小集合Z,满足|Z∩[ai,bi]|>=ci(Z里边在闭区间[ai,bi]的个数不小于ci)。
多组数据:
n(1<=n<=50000)区间的个数
n行:
ai bi ci(0<=ai<=bi<=50000,1<=ci<=bi-ai+1)
_____________________________________________________
这是一道查分约束题目。
Si为0-i中包含在Z中的个数,固有:
Si-Si-1<=1
Si-Si-1>=0
Sbi-Sai-1>=ci
依照上面不等式,变形并建边。
求的Smax-S0>=x,变形为S0-Smax<=-x,所以求max到0的最短路,就是答案的相反数。
_____________________________________________________
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 #include<queue> 7 using namespace std; 8 int n,maxd; 9 struct edge 10 { 11 int u,v,w,next; 12 }e[150010]; 13 int head[50010],js=0; 14 int dis[50010]; 15 bool inq[50010]; 16 int inqt[50010]; 17 queue<int>q; 18 void init() 19 { 20 js=0; 21 maxd=0; 22 memset(head,0,sizeof(head)); 23 } 24 void addage(int u,int v,int w) 25 { 26 e[++js].u=u;e[js].v=v;e[js].w=w; 27 e[js].next=head[u];head[u]=js; 28 } 29 bool spfa() 30 { 31 memset(inq,0,sizeof(inq)); 32 memset(dis,0x7f,sizeof(dis)); 33 memset(inqt,0,sizeof(inqt)); 34 q.push(maxd+1); 35 inq[maxd+1]=1; 36 inqt[maxd+1]=1; 37 dis[maxd+1]=0; 38 while(!q.empty()) 39 { 40 int u=q.front(); 41 q.pop(); 42 inq[u]=0; 43 for(int i=head[u];i;i=e[i].next) 44 { 45 int v=e[i].v; 46 if(dis[v]>dis[u]+e[i].w) 47 { 48 dis[v]=dis[u]+e[i].w; 49 if(!inq[v]) 50 { 51 inq[v]=1; 52 inqt[v]++; 53 q.push(v); 54 if(inqt[v]>50000)return 0; 55 } 56 } 57 } 58 } 59 return 1; 60 } 61 int main() 62 { 63 while(scanf("%d",&n)==1) 64 { 65 init(); 66 for(int a,b,c,i=1;i<=n;i++) 67 { 68 scanf("%d%d%d",&a,&b,&c); 69 if(b>maxd)maxd=b; 70 addage(b+1,a,-c); 71 } 72 73 for(int i=1;i<=maxd+1;i++) 74 { 75 addage(i-1,i,1); 76 addage(i,i-1,0); 77 } 78 if(spfa())printf("%d\n",-dis[0]); 79 } 80 return 0; 81 }
View Code
转载于:https://www.cnblogs.com/gryzy/p/6212196.html
POJ1201 区间相关推荐
- POJ-1201 Intervals---差分约束
题目链接: https://vjudge.net/problem/POJ-1201 题目大意: 一个整数集合Z有n个区间,每个区间有3个值,ai,bi,ci代表,在区间[ai,bi]上至少有ci个整数 ...
- Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)
Redis 的列表是链表而不是数组.这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n). 当列表弹出了最后一个元素之后,该数据结构自动被删除, ...
- LeetCode简单题之汇总区间
题目 给定一个 无重复元素 的 有序 整数数组 nums . 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 .也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范 ...
- FhqTreap的区间翻转
学 Fhq 就是为了尽量不去写某毒瘤数据结构,所以自然要来杠一杠某数据结构的经典操作:区间反转 听起来玄乎,但只需要一个小 trick 就行了:把原来的区间以下标作为权值建成 Treap , 这样整棵 ...
- 【基本操作】主席数统计区间不同颜色个数
例题:询问 $n$ 个数中无修改的区间不同数个数,不带修改(SPOJ的一道题). 方法1:直接删 我们尝试头铁地开正常的下标主席树! 依次插入 $n$ 个数,插入第 $i$ 个数时,我们只要在把第 $ ...
- 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树
题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...
- hdu 2665(主席树查询区间k大值)
先贴我自己写的代码做模板虽然跟原博主没什么两样.(一开始空间开的4*maxn,交到hdu上一直TLE很奇怪) #include<bits/stdc++.h> using namespace ...
- mysql 数字区间_币投君0904丨数字货币暴跌原因何在
昨日数字货币再次集体闪崩,btc甚至刺穿10000大关,合约帝数据显示,过去 24 小时全网爆仓超过 10 亿美元,共有 6.7 万人成为爆仓受害者.究其原因主要有两个方面:一方面是昨晚美股暴跌,三大 ...
- Awcing算法---区间合并
#include <iostream> #include <algorithm> #include <vector> using namespace std; ty ...
最新文章
- 计算机视觉算法——Transformer学习笔记
- 全面剖析支付宝服务窗功能二次开发
- GitHub vs. Bitbucket 不只是功能不同
- 前端如何实现音乐盒胶盘的转动_郑州Web前端入门教程之如何实现图片优化?
- android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
- 广州电子厂房净化工程_简述设计电子车间净化工程的注意要点
- 仿英雄联盟比赛直播网页模板
- 随想录(一个android原生app的代码赏析)
- 安卓-内部存储、外部存储目录
- (2020)Java后端开发----(面试题和笔试题)
- miniprograme-wsx
- 快速卸载软件和残余,很Nice的一款卸载工具—Your Unin-staller!
- 参与百度世界2012 赢百度APP推广大礼包
- DDR SDRAM内存测试的一种官方方案(简单易懂)
- 计算机组成原理-存储器的层次结构
- Android虚拟按键的适配
- 使用 this.$parent 子组件调用父组件方法
- Andriod 电池检测NTC电阻值的软件设定
- android 跑马灯 竖线,专为电竞和内容创作者而生!体验惠普 ENVY TE01台式机
- 水库安全监测自动化系统解决方案
热门文章
- else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句
- C语言“悬空指针”和“野指针”究竟是什么意思?
- delphi报列表索引越界怎么处理_图解Elasticsearch索引机制,此篇带你领悟新世界...
- python中mean的用法_Python statistics mean()用法及代码示例
- 用python找对象_还在单身的你 Python教你如何脱单
- pat 乙级 1010 一元多项式求导(C++)
- 工业级以太网交换机具有哪些优越特性
- 工业级千兆以太网光纤收发器产品介绍
- 【渝粤教育】广东开放大学 机械制造基础 形成性考核 (55)
- 电源模块低温和高温工作会造成什么后果?