P3588 [POI2015]PUS(拓扑排序+线段树)
对于每个$(l,r,k)$,将$k$个位置向剩下$r-l-k+1$个位置连边,边权为$1$,这样就保证$k$个位置比剩下的大
先给所有位置填$1e9$保证最优
然后拓扑排序填数
填的数不在$[1,1e9]$内或者出现环,即为不合法
但是这样边数过多会超时
于是考虑线段树优化建图
把$n$个点建成线段树,每个节点向左右儿子连边,边权为0。
这样每次连一个区间$[l,r]$就只需要$log(r-l+1)$次
注意不合法情况要枚举完整
#include<iostream>
#include<cstdio>
using namespace std;
#define N 100005
#define M 6000005
int n,s,m,u,pos[N],h[N*],L,R,no;
int p[N*],w[N*],id[N]; bool vis[N*];
int Cnt,hd[N*],nxt[M],ed[N*],poi[M],val[M],in[N*];
void adde(int x,int y,int v){
nxt[ed[x]]=++Cnt; hd[x]=hd[x]?hd[x]:Cnt;
ed[x]=Cnt; poi[Cnt]=y; val[Cnt]=v; ++in[y];
}
#define mid (l+r)/2
int build(int o,int l,int r){
w[p[o]=++u]=1e9;
if(l==r) return id[l]=u;
adde(p[o],build(o<<,l,mid),);
adde(p[o],build(o<<|,mid+,r),);
return p[o];
}
void Add(int o,int l,int r,int x1,int x2,int k){
if(x1<=l&&r<=x2){adde(k,p[o],); return ;}
if(x1<=mid) Add(o<<,l,mid,x1,x2,k);
if(x2>mid) Add(o<<|,mid+,r,x1,x2,k);
}
void work(){
int tt=;
for(int i=;i<=u;++i) if(!in[i]) h[++R]=i;
while(L!=R){
if(L>=N) L=;
int x=h[++L]; ++tt;
if(w[x]<) no=;//填的数<1
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(vis[to]&&w[to]>w[x]-val[i]) no=;//填的数比已给定位置上的数值小
w[to]=min(w[to],w[x]-val[i]);
if((--in[to])==){
if(R>=N) R=;
h[++R]=to;
}
}
}
if(tt<u) no=;//图中有环
}
int main(){
scanf("%d%d%d",&n,&s,&m);
build(,,n);
for(int i=,Id,v;i<=s;++i){
scanf("%d%d",&Id,&v);
if(v<||v>1e9) no=;//给定数不合法
w[id[Id]]=v; vis[id[Id]]=;
}
for(int i=,l,r,k;i<=m;++i){
scanf("%d%d%d",&l,&r,&k); w[++u]=1e9;//新建一个中转节点
for(int j=;j<=k;++j)
scanf("%d",&pos[j]),adde(id[pos[j]],u,);
if(l<pos[]) Add(,,n,l,pos[]-,u);
if(r>pos[k]) Add(,,n,pos[k]+,r,u);
for(int j=;j<k;++j)
if(pos[j]+<pos[j+])
Add(,,n,pos[j]+,pos[j+]-,u);
}work();
if(no) puts("NIE");
else{
puts("TAK");
for(int i=;i<=n;++i) printf("%d ",w[id[i]]);
}return ;
}
P3588 [POI2015]PUS(拓扑排序+线段树)的更多相关文章
- P3588 【[POI2015]PUS】(线段树优化建边)
P3588 [[POI2015]PUS] 终于有个能让我一遍过的题了,写篇题解纪念一下 给定长度为n的序列和其中部分已知的数,还有m个大小关系:区间\([l,r]\)中,有k个给定的数比剩下的\(r- ...
- CF798E. Mike and code of a permutation [拓扑排序 线段树]
CF798E. Mike and code of a permutation 题意: 排列p,编码了一个序列a.对于每个i,找到第一个\(p_j > p_i\)并且未被标记的j,标记这个j并\( ...
- Nowcoder Hash Function ( 拓扑排序 && 线段树优化建图 )
题目链接 题意 : 给出一个哈希表.其避免冲突的方法是线性探测再散列.现在问你给出的哈希表是否合法.如果合法则输出所有元素插入的顺序.如果有多解则输出字典序最小的那一个.如果不合法则输出 -1 分析 ...
- Luogu5289 十二省联考2019字符串问题(后缀数组+拓扑排序+线段树/主席树/KDTree)
先考虑80分做法,即满足A串长度均不小于B串,容易发现每个B串对应的所有A串在后缀数组上都是一段连续区间,线段树优化连边然后判环求最长链即可.场上就写了这个. 100分也没有什么本质区别,没有A串长度 ...
- hdu 5195 DZY Loves Topological Sorting (拓扑排序+线段树)
DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 ...
- hdu 5638 Toposort (拓扑排序+线段树)
Toposort Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- bzoj4383 [POI2015]Pustynia 拓扑排序+差分约束+线段树优化建图
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4383 题解 暴力的做法显然是把所有的条件拆分以后暴力建一条有向边表示小于关系. 因为不存在零环 ...
- 洛谷P3588 [POI2015]PUS(线段树优化建图)
题面 传送门 题解 先考虑暴力怎么做,我们把所有\(r-l+1-k\)中的点向\(x\)连有向边,表示\(x\)必须比它们大,那么如果这张图有环显然就无解了,否则的话我们跑一个多源最短路,每个点的\( ...
- 【BZOJ-3832】Rally 拓扑序 + 线段树 (神思路题!)
3832: [Poi2014]Rally Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 168 Solved: ...
随机推荐
- Composite UI Application Block(CAB)
序言 资料 https://www.cnblogs.com/lglruirui/archive/2010/06/21/1761737.html?tdsourcetag=s_pcqq_aiomsg ht ...
- BeanPostProcessor和BeanFactoryPostProcessor的区别
官方文档: 在Spring核心的1.8章节 使用BeanPostProcessor自定义Bean BeanPostProcessor 接口定义了您可以实现的回调方法,以提供您自己的(或覆盖容器的默认) ...
- Spring Boot教程(十六)属性配置文件详解(1)
相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷.我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁 ...
- [CSP-S模拟测试]:Cicada拿衣服(暴力+乱搞)
题目传送门(内部题94) 输入格式 第一行两个整数$n,k$,代表衣服的数量和阈值. 接下来一行$n$个数,第$i$个数$a_i$表示每件衣服的愉悦值. 输出格式 输出一行$n$个数,第$i$个数为$ ...
- android自定义camera以及uri和文件路径之间的转换
相对直接调用系统的camera,这种方法使用得相对还少一些.根据api文档,步骤如下: 定义一个预览类 可以参照<android高薪之路>这本书上面,有这种方法的一种完整实现 而对应的ac ...
- 2018-2019-2 20165235《网络对抗技术》Exp7 网络欺诈防范
2018-2019-2 20165235<网络对抗技术>Exp7 网络欺诈防范 实验目的 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法 实验内容 (1)简单应 ...
- 尚硅谷Docker---docker安装及简介
尚硅谷Docker---docker安装及简介 一.总结 一句话总结: docker就相当于是一个极微型的linux系统,独立 1.使用Docker的步骤? 1).安装Docker 2).去Docke ...
- zay大爷的神仙题目 D1T1-大美江湖
在前几天的时候,千古神犇zay(吊打zhx那个)出了一套神仙题目,所以我得来分析分析QWQ 先补个网易云链接QWQ 毕竟是T1嘛,还算是比较简单的,那道题,读完题目就发现是个中等模拟(猪国杀算大模拟的 ...
- Python Module_subprocess_调用 Powershell
目录 目录 前言 Powershell call Python Python call Powershell Powershell发送邮件 最后 前言 使用Python内建的subprocess模块, ...
- 在VSCode中开启ESLint风格审查
最近一直在学习开发一个VUE项目,几乎没有前端基础摸爬滚打,就一边摸索HTML,JS,CSS一边模仿着已有代码开发,也还算能学到东西. VSCode确实还不错,很轻量.在刚开始学写vue的时候,后台总 ...