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(拓扑排序+线段树)的更多相关文章

  1. P3588 【[POI2015]PUS】(线段树优化建边)

    P3588 [[POI2015]PUS] 终于有个能让我一遍过的题了,写篇题解纪念一下 给定长度为n的序列和其中部分已知的数,还有m个大小关系:区间\([l,r]\)中,有k个给定的数比剩下的\(r- ...

  2. CF798E. Mike and code of a permutation [拓扑排序 线段树]

    CF798E. Mike and code of a permutation 题意: 排列p,编码了一个序列a.对于每个i,找到第一个\(p_j > p_i\)并且未被标记的j,标记这个j并\( ...

  3. Nowcoder Hash Function ( 拓扑排序 && 线段树优化建图 )

    题目链接 题意 : 给出一个哈希表.其避免冲突的方法是线性探测再散列.现在问你给出的哈希表是否合法.如果合法则输出所有元素插入的顺序.如果有多解则输出字典序最小的那一个.如果不合法则输出 -1 分析 ...

  4. Luogu5289 十二省联考2019字符串问题(后缀数组+拓扑排序+线段树/主席树/KDTree)

    先考虑80分做法,即满足A串长度均不小于B串,容易发现每个B串对应的所有A串在后缀数组上都是一段连续区间,线段树优化连边然后判环求最长链即可.场上就写了这个. 100分也没有什么本质区别,没有A串长度 ...

  5. hdu 5195 DZY Loves Topological Sorting (拓扑排序+线段树)

    DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 ...

  6. hdu 5638 Toposort (拓扑排序+线段树)

    Toposort Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  7. bzoj4383 [POI2015]Pustynia 拓扑排序+差分约束+线段树优化建图

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4383 题解 暴力的做法显然是把所有的条件拆分以后暴力建一条有向边表示小于关系. 因为不存在零环 ...

  8. 洛谷P3588 [POI2015]PUS(线段树优化建图)

    题面 传送门 题解 先考虑暴力怎么做,我们把所有\(r-l+1-k\)中的点向\(x\)连有向边,表示\(x\)必须比它们大,那么如果这张图有环显然就无解了,否则的话我们跑一个多源最短路,每个点的\( ...

  9. 【BZOJ-3832】Rally 拓扑序 + 线段树 (神思路题!)

    3832: [Poi2014]Rally Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 168  Solved:  ...

随机推荐

  1. 20180705 SSH,SSM

    1.数据源切换2.数据库SQL server 2008R23.Herbernate,MyBaits, 框架spring mvc hibernate mybatis maven 管理 登录 spring ...

  2. 大文件的分片传,断点续传,md5校验

    一.概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载.在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了.一般断点下载时才用到Range和Content- ...

  3. sublime的python开发环境搭建

    至少很长一段时间内,我个人用的一直是pycharm,也感觉挺好用的,也没啥大毛病 但是pycharm确实有点笨重,啥功能都有,但是有很多可能这辈子我也不会用到,并且pycharm打开的速度确实不敢恭维 ...

  4. Java数据结构之排序---选择排序

    简单选择排序的介绍: 从给定的序列中,按照指定的规则选出某一个元素,再根据规定交换位置后达到有序的目的. 简单选择排序的基本思想: 假定我们的数组为int [] arr = new int[n],第一 ...

  5. Mongodb副本集集群搭建

    一.环境准备 1.1.主机信息(机器配置要求见硬件及开发标准规范文档V1.0) 序号 主机名 IP 1 DB_01 10.202.105.52 2 DB_02 10.202.105.53 3 DB_0 ...

  6. Spring Boot 访问到页面返回数据乱码

    在@RequestMapping注解中增加produces="application/json;charset=UTF-8"即可 例如:@RequestMapping(value ...

  7. pycharm2019连接mysql错误08801 ------Connection to django1@localhost failed. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.

    Error:Connection to django1@localhost failed. [08001] Could not create connection to database server ...

  8. 为java类起别名

    <typeAliases> <!-- 1.typeAlias:为某个java类型起别名 type:指定要起别名的类型全类名;默认别名就是类名小写:employee alias:指定新 ...

  9. 浏览器默认样式及reset

    写在前面 首先纠正一个易错概念.div并非生来就是块元素,而是每个浏览器都有一套默认的css样式(优先级最低),默认样式里会把div设置成display: block;还有margin,padding ...

  10. VBA通过C#以API方式调用JS脚本函数

    http://www.cnblogs.com/Charltsing/p/JSDotNetAPI.html 在网页采集中,很多时候需要运行网站下载的某个js文件中的函数,以计算Request参数.VBA ...