【BZOJ4448】[Scoi2015]情报传递 主席树+LCA
【BZOJ4448】[Scoi2015]情报传递
Description
Input
Output
Sample Input
7
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
HINT
题解:离线处理+主席树+倍增LCA,没有别的了~
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=200010;
struct sag
{
int ls,rs,siz;
}s[maxn*30];
int n,m,cnt,root,tot;
int rt[maxn],fa[maxn][20],to[maxn],next[maxn],head[maxn],dep[maxn];
int v[maxn],qa[maxn],qb[maxn],qc[maxn];
int rd()
{
int ret=0; char gc=getchar();
while(gc<'0'||gc>'9') gc=getchar();
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret;
}
void add(int a,int b)
{
to[cnt]=b,next[cnt]=head[a],head[a]=cnt++;
}
void insert(int x,int &y,int l,int r,int pos)
{
if(!pos)
{
y=x;
return ;
}
y=++tot;
if(l==r)
{
s[y].siz++;
return;
}
int mid=l+r>>1;
if(pos<=mid) s[y].rs=s[x].rs,insert(s[x].ls,s[y].ls,l,mid,pos);
else s[y].ls=s[x].ls,insert(s[x].rs,s[y].rs,mid+1,r,pos);
s[y].siz=s[x].siz+1;
}
void dfs(int x)
{
insert(rt[fa[x][0]],rt[x],1,m,v[x]);
for(int i=head[x];i!=-1;i=next[i]) dep[to[i]]=dep[x]+1,dfs(to[i]);
}
int query(int a,int b,int c,int d,int l,int r,int pos)
{
if(pos<=0) return 0;
if(r<=pos) return s[a].siz+s[b].siz-s[c].siz-s[d].siz;
int mid=l+r>>1;
if(pos<=mid) return query(s[a].ls,s[b].ls,s[c].ls,s[d].ls,l,mid,pos);
return s[s[a].ls].siz+s[s[b].ls].siz-s[s[c].ls].siz-s[s[d].ls].siz+query(s[a].rs,s[b].rs,s[c].rs,s[d].rs,mid+1,r,pos);
}
int main()
{
n=rd();
int i,j,a,b,c;
memset(head,-1,sizeof(head));
for(i=1;i<=n;i++)
{
fa[i][0]=rd();
if(!fa[i][0]) root=i;
else add(fa[i][0],i);
}
m=rd();
for(i=1;i<=m;i++)
{
b=rd();
if(b==1) qa[i]=rd(),qb[i]=rd(),qc[i]=i-rd()-1;
else a=rd(),v[a]=i;
}
for(j=1;(1<<j)<n;j++)
for(i=1;i<=n;i++)
fa[i][j]=fa[fa[i][j-1]][j-1];
dep[1]=1,dfs(1);
for(i=1;i<=m;i++)
{
if(qa[i])
{
a=qa[i],b=qb[i];
if(dep[a]<dep[b]) swap(a,b);
for(j=19;j>=0;j--) if(dep[fa[a][j]]>=dep[b]) a=fa[a][j];
if(a!=b)
{
for(j=19;j>=0;j--) if(fa[a][j]!=fa[b][j]) a=fa[a][j],b=fa[b][j];
a=fa[a][0];
}
c=dep[qa[i]]+dep[qb[i]]-2*dep[a]+1;
printf("%d %d\n",c,query(rt[qa[i]],rt[qb[i]],rt[a],rt[fa[a][0]],1,m,qc[i]));
}
}
return 0;
}
【BZOJ4448】[Scoi2015]情报传递 主席树+LCA的更多相关文章
- BZOJ4448[Scoi2015]情报传递——主席树+LCA
题目描述 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员口J-能有 若T名(可能没有)下线,除1名大头目外其余n-1名情报员有且仅有1名上线.奈特公司纪律森严 ...
- bzoj4448 [Scoi2015]情报传递 主席树+树上差分
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4448 题解 练习一下主席树的基础练习题找回感觉. 对于每一次询问,第一问显然随便做. 第二问的 ...
- 【bzoj4448】[Scoi2015]情报传递 主席树
题目描述 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员口J-能有若T名(可能没有)下线,除1名大头日外其余n-1名情报员有且仅有1名上线.奈特公司纪律森严, ...
- bzoj 4448 [Scoi2015]情报传递 主席树
比较套路的题目. 可以发现难点在于某个点的权值动态修改 且我们要维护树上一条路径上的点权>x的个数. 每个点都在动态修改 这意味着我们的只能暴力的去查每个点. 考虑将所有可以动态修改的点变成静态 ...
- 4448: [Scoi2015]情报传递|主席树|离线操作
能够把全部的操作离线,然后树链剖分将全部人搜集情报的时间增加到主席树中,查询的时候能够直接查询搜集情报时间≤i−C[i]−1的人的个数 时间复杂度n∗log22n,空间复杂度n∗log2n #incl ...
- Count on a tree SPOJ 10628 主席树+LCA(树链剖分实现)(两种存图方式)
Count on a tree SPOJ 10628 主席树+LCA(树链剖分实现)(两种存图方式) 题外话,这是我第40篇随笔,纪念一下.<( ̄︶ ̄)↗[GO!] 题意 是说有棵树,每个节点上 ...
- BZOJ4448 SCOI2015情报传递(离线+树链剖分+树状数组)
即滋磁单点修改,询问路径上小于某数的值有多少个.暴力树剖套个主席树(或者直接树上主席树,似乎就1个log了?感觉不一定比两个log快)即可,然而不太优美. 开始觉得可以cdq,然而就变成log^3了. ...
- 洛谷P4216 [SCOI2015]情报传递(树剖+主席树)
传送门 我们可以进行离线处理,把每一个情报员的权值设为它开始收集情报的时间 那么设询问的时间为$t$,就是问路径上有多少个情报员的权值小于等于$t-c-1$ 这个只要用主席树上树就可以解决了,顺便用树 ...
- bzoj4448 SCOI2015 情报传递 message
传送门bzoj4448 题解 离线之后构建树上主席树,每个点的线段树维护到根路径的信息,不用链剖(我的链剖只是拿来求\(\mathrm{lca}\)的),时空复杂度\(O(n\log{n})\). c ...
随机推荐
- 使RESTful Web服务更加实用的10个建议
提示:随着RESTful Web services的流行程度不断地上升,开发人员需要知道如何避免开发中的陷阱以及让开发出来的Web service达到自己能做到的最好程度. 过去的几年里,我们看到RE ...
- valgrind的callgrind工具进行多线程性能分析
1.http://valgrind.org/downloads/old.html 2.yum install valgrind Valgrind的主要作者Julian Seward刚获得了今年的Goo ...
- css - margin-padding
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 了解机器学习框架CoreML
代码地址如下:http://www.demodashi.com/demo/11972.html CoreML是iOS 11新推出的机器学习框架,是人工智能的核心内容,他可以在训练好的机器学习模型应用到 ...
- 你要相信你所做的一切对一个更美好的世界 Do have faith in what you are doing All for a better world
http://www.nowamagic.net/librarys/veda/detail/2502 Do have faith in what you are doing. 先不要往下看,试试品尝上 ...
- webpack 与 热编译webpack-dev-server
webpack.config.js 只需要注意加大加粗的地方. var webpack = require("webpack"); var HtmlWebpackPlugin = ...
- svn Couldn't open rep-cache database
出现这样的错误原因是因为 问题一 开始出现错误:The database disk image is malformed 解决方案:http://www.cnblogs.com/chen110xi/p ...
- Android JNI和NDK学习(04)--NDK调试方法(转)
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092812.html 本文主要介绍在ndk中添加log的方法.然后,我们就可 ...
- 基于OAuth2.0的统一身份认证中心设计
1. 引言 公司经历多年发展后,在内部存在多套信息系统,每套信息系统的作用各不相同,每套系统也都拥有自己独立的账号密码权限体系,这时,每个人员都需要记住不同系统的账号密码,人员入职和离职时,人事部门都 ...
- GoWeb编程之HelloWorld
使用Go实现我们的第一个Web服务器程序 package main import "net/http" import "fmt" //打印HelloWorld ...