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$杯 ...
随机推荐
- SNMP相关的RFC建议和链接
1. SNMP Books or Articleshttp://www.faqs.org/faqs/snmp-faq/part1/http://www.faqs.org/faqs/snmp-faq/p ...
- 对DB2常见错误的列举以及破解方案
我们今天主要描述的是DB2常见错误还有正对这些错误的解决方案,以下就是文章对DB2常见错误还有正对这些错误的解决方案的主要内容的详细描述. 以下的文章主要是介绍DB2常见错误还有正对这些错误的解决方案 ...
- Jquery的过滤选择器分为哪几种?
Jquery的过滤选择器分为哪几种? 转载▼ 标签: jquery 过滤选择器 分类 分类: JQuery 所有的过滤选择器分为哪几种: 一.基本过滤选择器(重点掌握下列八个) :first 选取第一 ...
- 常见Map 及 ArrayList 是否有序总结
常见Map 及 ArrayList 是否有序总结 说明:此处的排序 是指: 1: 往集合中插入元素的顺序与遍历元素的顺序的关系: 2: 往对象中插入元素否会根据元素的大小排序 public cla ...
- 【转载】解决nginx负载均衡的session共享问题
https://blog.csdn.net/u012081441/article/details/71787164 之前有写过ubuntu环境下搭建nginx环境,今天来谈一下nginx sessio ...
- Wooden Sticks -HZNU寒假集训
Wooden Sticks There is a pile of n wooden sticks. The length and weight of each stick are known in a ...
- API管理平台XXL-API
<API管理平台XXL-API> 一.简介 1.1 概述 XXL-API是一个简洁易用API管理平台,提供API的"管理"."文档"."M ...
- SignalR网页实时推送
1.新建项目,选择mvc4 Wed应用程序,选择Internet,视图引擎:Razor 2.在控制器中添加 并添加上视图 3.引用(install-package Microsoft.AspNet.S ...
- struct和union的区别
1)union是几个不同类型的变量共占一段内存(相互覆盖):struct是把不同类型的数据组合成一个整体 2)对齐方式略有区别:union不需要+,只需要拿出对齐后的最长 structure unio ...
- MySql常用两大存储引擎简介
MyISAM存储引擎简介 MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件. 首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.M ...