BZOJ_4448_[Scoi2015]情报传递_主席树
BZOJ_4448_[Scoi2015]情报传递_主席树
Description
Input
Output
Sample Input
0 1 1 2 2 3 3
6
1 4 7 0
2 1
2 4
2 7
1 4 7 1
1 4 7 3
Sample Output
5 2
5 1
离线,求出每个点开始搜集情报的最早的时间。
然后询问相当于查询有多少个点,满足位置和时间两个条件。
于是用主席树数一下点即可。
主席树维护根到路径的信息。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 200050
int head[N],to[N<<1],nxt[N<<1],cnt,dfn[N],dep[N],fa[N],root[N],ls[N*30],rs[N*30],t[N*30],tot;
int f[N][20],rt,n,m;
struct A {
int opt,x,y,z;
}a[N];
inline void add(int u,int v) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt;
}
void insert(int &y,int x,int l,int r,int v) {
y=++tot; t[y]=t[x]+1;
if(l==r) return ;
int mid=(l+r)>>1;
if(v<=mid) rs[y]=rs[x],insert(ls[y],ls[x],l,mid,v);
else ls[y]=ls[x],insert(rs[y],rs[x],mid+1,r,v);
}
void dfs(int x,int y) {
int i;
f[x][0]=y;
if(dfn[x]) insert(root[x],root[y],1,m,dfn[x]);
else root[x]=root[y];
dep[x]=dep[y]+1;
for(i=head[x];i;i=nxt[i]) {
if(to[i]!=y) {
dfs(to[i],x);
}
}
}
int lca(int x,int y) {
int i;
if(dep[x]<dep[y]) swap(x,y);
for(i=18;i>=0;i--) {
if(f[x][i]&&dep[f[x][i]]>=dep[y]) x=f[x][i];
}
if(x==y) return x;
for(i=18;i>=0;i--) {
if(f[x][i]!=f[y][i]) {
x=f[x][i]; y=f[y][i];
}
}
return f[x][0];
}
int query(int x,int y,int z,int w,int l,int r,int v) {
if(l==r) return t[x]+t[y]-t[z]-t[w];
int sizls=t[ls[x]]+t[ls[y]]-t[ls[z]]-t[ls[w]],mid=(l+r)>>1;
if(v<=mid) return query(ls[x],ls[y],ls[z],ls[w],l,mid,v);
else return query(rs[x],rs[y],rs[z],rs[w],mid+1,r,v)+sizls;
}
int main() {
scanf("%d",&n);
int i,x,j;
for(i=1;i<=n;i++) {
scanf("%d",&x);
if(x) {
add(x,i); add(i,x);
}
}
scanf("%d",&m);
for(i=1;i<=m;i++) {
scanf("%d",&a[i].opt);
if(a[i].opt==1) {
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
}else {
scanf("%d",&x); if(!dfn[x]) dfn[x]=i;
}
}
dfs(1,0);
for(j=1;(1<<j)<=n;j++) {
for(i=1;i<=n;i++) {
f[i][j]=f[f[i][j-1]][j-1];
}
}
for(i=1;i<=m;i++) {
if(a[i].opt==1) {
int l=lca(a[i].x,a[i].y);
int p=f[l][0];
printf("%d ",dep[a[i].x]+dep[a[i].y]-2*dep[l]+1);
if(i-a[i].z<=0) {
printf("0\n");continue;
}
printf("%d\n",query(root[a[i].x],root[a[i].y],root[l],root[p],1,m,i-a[i].z-1));
}
}
}
BZOJ_4448_[Scoi2015]情报传递_主席树的更多相关文章
- bzoj 4448 [Scoi2015]情报传递(主席树,LCA)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4448 [题意] 给定一颗树,询问一条路径上权值小于t-c的点数. [思路] 将一个2查 ...
- BZOJ_3514_Codechef MARCH14 GERALD07加强版_主席树+LCT
BZOJ_3514_Codechef MARCH14 GERALD07加强版_主席树+LCT Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. I ...
- BZOJ_3772_精神污染_主席树
BZOJ_3772_精神污染_主席树 Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大 ...
- BZOJ_3932_[CQOI2015]任务查询系统_主席树
BZOJ_3932_[CQOI2015]任务查询系统_主席树 题意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,P ...
- BZOJ_3123_[Sdoi2013]森林_主席树+启发式合并
BZOJ_3123_[Sdoi2013]森林_主席树+启发式合并 Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20 ...
- BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数
BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...
- BZOJ4448 SCOI2015情报传递(离线+树链剖分+树状数组)
即滋磁单点修改,询问路径上小于某数的值有多少个.暴力树剖套个主席树(或者直接树上主席树,似乎就1个log了?感觉不一定比两个log快)即可,然而不太优美. 开始觉得可以cdq,然而就变成log^3了. ...
- [bzoj4826][Hnoi2017]影魔_单调栈_主席树
影魔 bzoj-4826 Hnoi-2017 题目大意:给定一个$n$个数的序列$a$,求满足一下情况的点对个数: 注释:$1\le n,m\le 2\cdot 10^5$,$1\le p1,p2\l ...
- [bzoj5343][Ctsc2018]混合果汁_二分答案_主席树
混合果汁 bzoj-5343 Ctsc-2018 题目大意:给定$n$中果汁,第$i$种果汁的美味度为$d_i$,每升价格为$p_i$,每次最多添加$l_i$升.现在要求用这$n$中果汁调配出$m$杯 ...
随机推荐
- 面向对象(this的问题二)
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...
- FFPLAY的原理(五)
创建线程 Spawning Threads Overview Last time we added audio support by taking advantage of SDL's audio f ...
- AI 学习之路
前言:本文章纯属自己学习路线纪录,不喜勿喷. 最近AI很火,几乎是个程序员 都要去学习AI,作为一个菜鸡小前端,我也踏上了学习AI的方向. 在学习之中,最开始遇到了很多的困难,比如你不知道如何切入进来 ...
- (译) JSON-RPC 2.0 规范(中文版)
http://wiki.geekdream.com/Specification/json-rpc_2.0.html 起源时间: 2010-03-26(基于2009-05-24版本) 更新: 2013- ...
- require/exports 和 import/export 区别
零.区别 1.require/exports 是 CommonJS 的标准,适用范围如 Node.js 2.import/export 是 ES6 的标准,适用范围如 React 一.间接获取对象 ( ...
- POJ 2411 解题报告
传送门:http://poj.org/problem?id=2411 题目简述 有一个\(W\)行\(H\)列的广场,需要用\(1*2\)小砖铺满,小砖之间互相不能重叠,问 有多少种不同的铺法? 输入 ...
- python_pycharm下拉前置标示
在pycharm中是自动补全的变量的类别p:parameter 参数m:method方法c:class 类v:variable 变量f:function 函数 从定义的角度上看,我们知道函数(func ...
- 在mac OX10.11.6上安装MySQL
一.之前失败情况 官网下载dmg文件安装.源码安装,下过5.6 5.7 8.0 版本,都可以安装成功,但是在电脑设置界面无法启动,每次点启动输入密码后,均闪一下绿色然后变红色,既然不能界面启动,那 ...
- Tomcat配置与优化(内存、并发、管理)与性能监控
原文链接:http://blog.csdn.net/xyang81/article/details/51530979 一.JVM内存配置优化 在开发当中,当一个项目比较大时,依赖的jar包通常比较多, ...
- 加密原理介绍,代码实现DES、AES、RSA、Base64、MD5
阅读目录 github下载地址 一.DES对称加密 二.AES对称加密 三.RSA非对称加密 四.实际使用 五.关于Padding 关于电脑终端Openssl加密解密命令 关于网络安全的数据加密部分, ...