题目

给定一个长度为\(n\)的正整数序列 \(a\) ,每个数都在 \(1\) 到 \(10^9\) 范围内,

告诉你其中 \(s\) 个数,并给出 \(m\) 条信息,每条信息包含三个数 \(l,r,k\) 以及接下来 \(k\) 个正整数,

表示 \(a_l..a_{l+1}...a_{r-1}..a_r\) 里这 \(k\) 个数中的任意一个都比任意一个剩下的 \(r-l+1-k\) 个数大 (严格大于,即没有等号)。


分析

考虑约束条件形如\(a[x]+1<a[y]\),建边跑最长路即可,

现在问题是建边,考虑线段树优化建边,

由于它有已知值,所以要在已知值的基础上跑最长路,

如果约束条件有环那无解,最小答案超过已知值无解


代码

  1. #include <cstdio>
  2. #include <cctype>
  3. #define rr register
  4. using namespace std;
  5. const int N=1000011; struct node{int y,w,next;}e[N<<2];
  6. int ls[N],rs[N],deg[N],dis[N],a[N],n,cnt,m,T,et,as[N],root,p[N],q[N],head=1,tail;
  7. inline signed iut(){
  8. rr int ans=0; rr char c=getchar();
  9. while (!isdigit(c)) c=getchar();
  10. while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
  11. return ans;
  12. }
  13. inline void print(int ans){
  14. if (ans>9) print(ans/10);
  15. putchar(ans%10+48);
  16. }
  17. inline void add(int x,int y,int w){
  18. e[++et]=(node){y,w,as[x]},as[x]=et;
  19. }
  20. inline void build(int &k,int l,int r){
  21. if (l==r) {k=l; return;}
  22. if (!k) k=++cnt;
  23. rr int mid=(l+r)>>1;
  24. build(ls[k],l,mid);
  25. build(rs[k],mid+1,r);
  26. add(ls[k],k,0),add(rs[k],k,0);
  27. }
  28. inline void update(int k,int l,int r,int x,int y,int z){
  29. if (l==x&&r==y) {add(k,z,0); return;}
  30. rr int mid=(l+r)>>1;
  31. if (y<=mid) update(ls[k],l,mid,x,y,z);
  32. else if (x>mid) update(rs[k],mid+1,r,x,y,z);
  33. else update(ls[k],l,mid,x,mid,z),update(rs[k],mid+1,r,mid+1,y,z);
  34. }
  35. signed main(){
  36. cnt=n=iut(),T=iut(),m=iut();
  37. for (rr int x;T;--T)
  38. x=iut(),dis[x]=a[x]=iut();
  39. build(root,1,n);
  40. for (rr int i=1;i<=m;++i){
  41. rr int l=iut(),r=iut(); p[0]=iut();
  42. for (rr int j=1;j<=p[0];++j) add(cnt+i,p[j]=iut(),1);
  43. for (rr int j=1;j<p[0];++j) if (p[j]+1<p[j+1])
  44. update(root,1,n,p[j]+1,p[j+1]-1,cnt+i);
  45. if (l<p[1]) update(root,1,n,l,p[1]-1,cnt+i);
  46. if (p[p[0]]<r) update(root,1,n,p[p[0]]+1,r,cnt+i);
  47. }
  48. cnt+=m;
  49. for (rr int i=1;i<=cnt;++i)
  50. if (!deg[i]){
  51. q[++tail]=i;
  52. if (!dis[i]) dis[i]=1;
  53. }
  54. while (head<=tail){
  55. rr int x=q[head++];
  56. for (rr int i=as[x];i;i=e[i].next)
  57. if (dis[e[i].y]<dis[x]+e[i].w){
  58. dis[e[i].y]=dis[x]+e[i].w;
  59. if (dis[e[i].y]>a[e[i].y]&&a[e[i].y])
  60. return !printf("NIE");
  61. if (--deg[e[i].y]==0) q[++tail]=e[i].y;
  62. }
  63. }
  64. for (rr int i=1;i<=cnt;++i)
  65. if (deg[i]>0||dis[i]>1e9)
  66. return !printf("NIE");
  67. printf("TAK");
  68. for (rr int i=1;i<=n;++i) putchar(i==1?10:32),print(dis[i]);
  69. return 0;
  70. }

#差分约束系统,最长路,线段树优化建边#洛谷 3588 [POI2015] PUS的更多相关文章

  1. 【bzoj4383】[POI2015]Pustynia 线段树优化建图+差分约束系统+拓扑排序

    题目描述 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r,k以及接下来k个正整数,表示a[l],a[l+1],...,a[r- ...

  2. 【bzoj3436】小K的农场 差分约束系统+最长路-Spfa

    原文地址:http://www.cnblogs.com/GXZlegend/p/6801470.html 题目描述 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总 ...

  3. 【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra

    题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...

  4. BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS

    BZOJ_3073_[Pa2011]Journeys_线段树优化建图+BFS Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N ...

  5. bzoj5017 [Snoi2017]炸弹 (线段树优化建图+)tarjan 缩点+拓扑排序

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5017 题解 这个题目方法挺多的. 线段树优化建图 线段树优化建图的做法应该挺显然的,一个炸弹能 ...

  6. [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)

    [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...

  7. UOJ#77. A+B Problem [可持久化线段树优化建边 最小割]

    UOJ#77. A+B Problem 题意:自己看 接触过线段树优化建图后思路不难想,细节要处理好 乱建图无果后想到最小割 白色和黑色只能选一个,割掉一个就行了 之前选白色必须额外割掉一个p[i], ...

  8. Codeforces 1045. A. Last chance(网络流 + 线段树优化建边)

    题意 给你 \(n\) 个武器,\(m\) 个敌人,问你最多消灭多少个敌人,并输出方案. 总共有三种武器. SQL 火箭 - 能消灭给你集合中的一个敌人 \(\sum |S| \le 100000\) ...

  9. BZOJ5017 [SNOI2017]炸弹 - 线段树优化建图+Tarjan

    Solution 一个点向一个区间内的所有点连边, 可以用线段树优化建图来优化 : 前置技能传送门 然后就得到一个有向图, 一个联通块内的炸弹可以互相引爆, 所以进行缩点变成$DAG$ 然后拓扑排序. ...

  10. 【BZOJ3681】Arietta 树链剖分+可持久化线段树优化建图+网络流

    [BZOJ3681]Arietta Description Arietta 的命运与她的妹妹不同,在她的妹妹已经走进学院的时候,她仍然留在山村中.但是她从未停止过和恋人 Velding 的书信往来.一 ...

随机推荐

  1. [BUUCTF][WEB][极客大挑战 2019]BabySQL 1

    靶机打开url 界面上显示,它做了更严格的过滤.看来后台是加了什么过滤逻辑 老规矩先尝试时候有sql注入的可能,密码框输入 123' 爆出sql错误信息,说明有注入点 构造万能密码注入 123' or ...

  2. Web流式下载数据时展示提示信息

    以Web方式下载数据有多种场景: 1.服务端本身已经存在文件,此时只需要一个文件访问地址即可下载,比如:将文件URL设置为<a>标签的href属性即可,点击<a>标签就能立即触 ...

  3. RK3568开发笔记(九):开发板buildroot固件调通RS485口,运行项目中RS485协议调试工具Demo

    前言   上一篇已经将Qt移植过去了,此时我们移植整体应用不是什么问题了,那么现在应用对外得接口使用了RS485接口,板载了一个RS485,于是需要调通,兼容这个开发板得RS485.   补充   看 ...

  4. Java 程序员第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片

    人工智能时代,最需要学习的编程语言是:python .笔者是个 python 小白,昨天花了两个小时,第一次成功运行起来 python 项目 . 项目是 powerpoint-extractor ,可 ...

  5. Sealos 是企业节省成本的终极武器

    本文通过多维度,多场景对比来阐述 Sealos 为企业节省大量成本,结合一些现有客户具体的实际情况全面分析成本模型,企业可以根据自己的实际情况来对号入座,看是否适合使用 Sealos. 云操作系统节省 ...

  6. 一文搞定POI,再也不怕excel导入导出了

    写在前面 在Java日常开发过程中,实现Excel文件的导入导出功能是一项常见的需求. 通过使用相关的Java库,如Apache POI.EasyPoi或EasyExcel,可以轻松地实现Excel文 ...

  7. Spring配置xml自定义事务管理器

    上一篇博客讲解了Spring配置xml事务,使用的是Spring框架提供的事务管理器. 在本篇博文当中,来讲解一下使用自定义的事务管理方式. 把上一篇博文当中的这个配置 <bean id=&qu ...

  8. STM32进入HardFault_Handler的调试方法

    在编写STM32程序代码时由于自己的粗心会发现有时候程序跑着跑着就进入了 HardFault_Handler中断,按照经验来说进入HardFault_Handler故障的原因主要有两个方面: 1:内存 ...

  9. Java | zuul 1.x 是如何实现请求转发的

    zuul 1.x 是如何实现请求转发的 文档写的再好,也不如源码写的好 源码地址: GitHub: https://github.com/Netflix/zuul Gitee: https://git ...

  10. cmd查看环境变量

    1.查看当前所有可用的环境变量:输入 set 即可查看. 2.查看某个环境变量:输入 "set 变量名"即可,比如想查看path变量的值,即输入 set path 3.修改环境变量 ...