[POI2015] Pustynia(差分约数,线段树优化建图,拓扑)
传送门
Description
给定一个长度为n的正整数序列aaa,每个数都在111到10910^9109范围内,告诉你其中sss个数,并给出mmm条信息,每条信息包含三个数l,r,kl,r,kl,r,k以及接下来kkk个正整数x1,x2,...,xkx_1,x_2,...,x_kx1,x2,...,xk,表示a[l],a[l+1],...,a[r−1],a[r]a[l],a[l+1],...,a[r-1],a[r]a[l],a[l+1],...,a[r−1],a[r]里 a[x1],a[x2],...,a[xk]a[x_1],a[x_2],...,a[x_k]a[x1],a[x2],...,a[xk]这kkk个数中的任意一个 都比 剩下的r−l+1−kr-l+1-kr−l+1−k个数中的任意一个大(严格大于,即没有等号)。
请任意构造出一组满足条件的方案,或者判断无解。
Solution
差分约数系统+线段树优化建图+按拓扑序DP
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=1e5+10;
struct Edge{int v,w;};
vector<Edge> g[N*10];
int tot,rt,ls[N*10],rs[N*10],id[N],a[N*10],dis[N*10],in[N*10];
queue<int> q;
int n,s,m;
void add(int u,int v,int w){g[u].push_back((Edge){v,w});in[v]++;
}
void build(int &u,int l,int r){u=++tot;if(l==r){id[l]=u;return;}int mid=(l+r)>>1;build(ls[u],l,mid);build(rs[u],mid+1,r);add(ls[u],u,0);add(rs[u],u,0);
}
void update(int u,int l,int r,int ql,int qr){if(ql>qr) return;if(ql<=l&&r<=qr){add(u,tot,0);return;}int mid=(l+r)>>1;if(ql<=mid) update(ls[u],l,mid,ql,qr);if(qr>mid) update(rs[u],mid+1,r,ql,qr);
}
int main(){scanf("%d%d%d",&n,&s,&m);build(rt,1,n);for(int i=1;i<=s;i++){int p,d;scanf("%d%d",&p,&d);a[id[p]]=d;}for(int i=1;i<=m;i++){int l,r,k,x,lst;scanf("%d%d%d",&l,&r,&k);tot++;lst=l-1;for(int j=1;j<=k;j++){scanf("%d",&x);add(tot,id[x],1);update(1,1,n,lst+1,x-1);lst=x;}update(1,1,n,lst+1,r);}for(int i=1;i<=tot;i++){if(in[i]==0){dis[i]=1;q.push(i);}}int t=0;while(!q.empty()){int u=q.front();q.pop();t++;if(dis[u]>1000000000) return puts("NIE"),0;if(a[u]&&dis[u]>a[u]) return puts("NIE"),0;dis[u]=max(dis[u],a[u]);for(int i=0;i<g[u].size();i++){int v=g[u][i].v,w=g[u][i].w;dis[v]=max(dis[u]+w,dis[v]);in[v]--;if(in[v]==0) q.push(v);}}if(t<tot) return puts("NIE"),0;puts("TAK");for(int i=1;i<=n;i++) printf("%d ",dis[id[i]]);return 0;
}
[POI2015] Pustynia(差分约数,线段树优化建图,拓扑)相关推荐
- jzoj4240 [五校联考5day2]游行 拓扑排序+倍增lca+线段树优化建图
Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...
- cf 786 B 线段树优化建图
cf 786 B 链接 CF 思路 n个点,3种建边方式,规模\(O(n^2)\) 线段树优化建图 注意 读入的数据好坑啊,说好的v,u变成了u,v. 两棵树,一棵出,一棵入.线段树的作用只不过是按照 ...
- 模板:线段树优化建图
前言 百川到海,天下归一 解析 线段树优化建图是用于对一个区间的点连边时的优化方法 建一棵in树一棵出树分别往上和下指即可 大概长这样 (pia的洛谷的照片) 建树 正常动态开点即可 void bui ...
- P6348-[PA2011]Journeys【线段树优化建图,最短路】
正题 题目链接:https://www.luogu.com.cn/problem/P6348 题目大意 nnn个点的一张图,mmm条边表示区间[a,b][a,b][a,b]向区间[c,d][c,d][ ...
- CF786B Legacy 线段树优化建图
洛谷题目链接 题意 首先想到单源最短路,但是如果暴力模拟就会导致从区间里每一个点连向另一个点时最坏情况时间复杂度达到O(N*N),显然会TLE.那么看到区间操作,自然会想到处理区间操作的数据结构,这一 ...
- Codeforces 786B Legacy (线段树优化建图)
Codeforces 786B Legacy (线段树优化建图) 题意:\(n\)个点,有\(3\)种连边操作:1.将\(u\)指向\(v\):2.将\(v\)指向编号在区间\([l,r]\)的点:3 ...
- P5025-[SNOI2017]炸弹【tarjan,线段树优化建图】
正题 题目链接:https://www.luogu.com.cn/problem/P5025 题目大意 .nnn个炸弹,每个在xxx位置处,范围为rrr.定义fif_ifi表示第iii个炸弹爆炸能连 ...
- Gym - 102174G 神圣的 F2 连接着我们 (线段树优化建图 + 多源最短路)
Description 小白非常喜欢玩 "县际争霸" 这款游戏,虽然他的技术并不容乐观."县际争霸" 的地图共有两个县,每个县里各有 n n n 个据点.同一个 ...
- CF786B Legacy(线段树优化建图)
传送门 ovo这题该怎么做呢?我们首先考虑暴力建图,但是因为建图的操作太多直接就会MLE,所以这个就别想了-- 我们考虑如何优化建图.因为发现一个点可以向一个区间连边,一个区间也可以向一个点连边,想到 ...
最新文章
- 怎么快速插入 100 条数据,用时最短
- 如何正确配置Nginx+PHP
- ie 报错 vuex requires a Promise polyfill in this browser
- linux c嵌入汇编语言,Linux 下的C和Intel 汇编语言混用
- Linux进阶之路————用户管理
- for语句 2017-03-17
- Auto Encoder再学习
- php框架中间件,【框架十】Coder PHP Framework 中间件
- Burp Post、Get数据包转为上传multipart/form-data格式数据包
- 寻找二值图像的连通域算法分析
- STM32智能锁指纹锁密码锁WIFI远程开锁微信小程序临时密码源码PCBA方案
- matlab信号经过瑞利,Matlab关于 BPSK信号通过瑞利信道的误码性能分析的仿真实验....
- 系统稳定性建设实践总结
- 计算机网络(第五版)读书笔记
- Matlab 并行代码
- 微信分享、极简微信分享、thinkphp微信分享、laravel微信分享、3分钟完成微信分享
- Log4j2跨线程打印traceId
- centos7中英文切换
- 2021年氧化工艺考试报名及氧化工艺模拟考试题库
- 阿里和京东,谁在假装体面?
热门文章
- krc 编辑 linux,Linux网络编程
- 435. 无重叠区间(贪心经典题+思路+详解)
- JAVA 手撕底层arrayList代码(arrayList的简单实现)
- java中编译类型的方法 和 运行时的类型方法 有什么区别
- HTML和css重要的知识点,html 和 css 基础知识点(一)(示例代码)
- [剑指offer]面试题3:二维数组中的查找
- [蓝桥杯2016初赛]剪邮票-dfs+next_permutation(好题)
- 辅助类BinaryTreeNodeIndex(用index索引代替指针)
- 【牛客NOIP模拟】牛半仙的妹子序列【DP】【Segment Tree Beats】
- AGC023F - 01 on Tree