zjnu1726 STOGOVI (lca)
Description
Mirko is playing with stacks. In the beginning of the game, he has an empty stack denoted with number 0. In the
ith step of the game he will choose an existing stack denoted with v, copy it and do one of the following actions:
a. place number i on top of the new stack
b. remove the number from the top of the new stack
c. choose another stack denoted with w and count how many different numbers exist that are in the new stack
and in the stack denoted with w
The newly created stack is denoted with i.
Mirko doesn’t like to work with stacks so he wants you to write a programme that will do it for him. For each
operation of type b output the number removed from stack and for each operation of type c count the required
numbers and output how many of them there are.
Input
The first line of input contains the integer N (1 <= N <= 300000), the number of steps in Mirko’s game.
The steps of the game are chronologically denoted with the first N integers.
The ith of the following N lines contains the description of the ith step of the game in one of the following three
forms:
"a v" for operation of type a.
"b v" for operation of type b.
"c v w" for operation of type c.
The first character in the line denotes the type of operation and the following one or two denote the accompanying
stack labels that will always be integers from the interval [0,i-1].
For each operation of type b, the stack we’re removing the element from will not be empty.
Output
For each operation type b or c output the required number, each in their own line, in the order the operations
were given in the input.
Sample Input
a 0
a 1
b 2
c 2 3
b 4
11
a 0
a 1
a 2
a 3
a 2
c 4 5
a 5
a 6
c 8 7
b 8
b 8
Sample Output
1
2
2
2
8
8
Hint
In the beginning, we have the stack S0 = {}. In the first step, we copy S0 and place
number 1 on top, so S1 = {1}. In the second step, we copy S1 and place 2 on top of it, S2 = {1,2}. In the third step we
copy S2 and remove number 2 from it, S3 = {1}. In the fourth step we copy S2 and denote the copy with S4, then count
the numbers appearing in the newly created stack S4 and stack S3, the only such number is number 1 so the solution is 1.
In the fifth step we copy S4 and remove number 2 from it, S5 = {1}.
题意:一开始给你一个空栈,有3个操作。1.a v:先把编号为v的栈复制,然后在栈顶上放i 2.b v:先把编号为v的栈复制,然后去掉栈顶元素 3.c v w:先把编号为v的栈复制,然后数出同时存在于v,w栈的数的个数。开一个二叉树,如果是a操作,那么加入新的节点,如果是b操作,那么找到v的父节点,如果是c操作,那么全部输入读入后,求一个lca。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double ldb;
#define inf 99999999
#define pi acos(-1.0)
#define maxn 300005
vector<int>vec[maxn];
vector<int>::iterator it;
struct node{
int x,y;
}c[maxn];
int jd[maxn],fa[maxn],f[maxn][25],dep[maxn],ans[maxn],daibiao[maxn],vis[maxn],siz[maxn];
int lca(int x,int y){
int i;
if(dep[x]<dep[y]){
swap(x,y);
}
for(i=20;i>=0;i--){
if(dep[f[x][i] ]>=dep[y]){
x=f[x][i];
}
}
if(x==y)return x;
for(i=20;i>=0;i--){
if(f[x][i]!=f[y][i]){
x=f[x][i];y=f[y][i];
}
}
return f[x][0];
}
int main()
{
int n,m,i,j,x,jiedian,jiedian1,y,k;
char s[10];
while(scanf("%d",&m)!=EOF)
{
jd[1]=1;
for(i=1;i<=m+1;i++)vec[i].clear();
int t=1;
daibiao[1]=1;
dep[1]=1;
for(i=2;i<=m+1;i++){
scanf("%s%d",s,&x);x++;
jiedian=jd[x];
if(s[0]=='a'){
t++;
dep[t]=dep[jiedian]+1;
jd[i]=t;
f[t][0]=jiedian;
daibiao[t]=i;
c[i].x=c[i].y=-2;
}
else if(s[0]=='b'){
ans[i]=daibiao[jiedian];
jiedian1=f[jiedian][0];
jd[i]=jiedian1;
c[i].x=c[i].y=-1;
}
else if(s[0]=='c'){
scanf("%d",&y);y++;
jd[i]=jiedian;
c[i].x=jd[i];c[i].y=jd[y];
}
}
for(k=1;k<=20;k++){
for(i=1;i<=m+1;i++){
f[i][k]=f[f[i][k-1]][k-1];
}
}
for(i=2;i<=m+1;i++){
if(c[i].x==-2)continue;
if(c[i].x==-1){
printf("%d\n",ans[i]-1);
}
else{
int gong=lca(c[i].x,c[i].y );
printf("%d\n",dep[gong]-1);
}
}
}
return 0;
}
zjnu1726 STOGOVI (lca)的更多相关文章
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]
3626: [LNOI2014]LCA Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2050 Solved: 817[Submit][Status ...
- [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)
Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...
- [bzoj2588][count on a tree] (主席树+lca)
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
- [板子]倍增LCA
倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm ...
- poj3417 LCA + 树形dp
Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4478 Accepted: 1292 Descripti ...
- [bzoj3626][LNOI2014]LCA
Description 给出一个$n$个节点的有根树(编号为$0$到$n-1$,根节点为$0$). 一个点的深度定义为这个节点到根的距离$+1$. 设$dep[i]$表示点$i$的深度,$lca(i, ...
- (RMQ版)LCA注意要点
inline int lca(int x,int y){ if(x>y) swap(x,y); ]][x]]<h[rmq[log[y-x+]][y-near[y-x+]+]])? rmq[ ...
- bzoj3631: [JLOI2014]松鼠的新家(LCA+差分)
题目大意:一棵树,以一定顺序走完n个点,求每个点经过多少遍 可以树链剖分,也可以直接在树上做差分序列的标记 后者打起来更舒适一点.. 具体实现: 先求x,y的lca,且dep[x]<dep[y] ...
随机推荐
- 认识webservice
1.为什么需要webservice? 目前还有很多商用程序继续在使用C++.Java.Visual Basic和其他各种各样的语言编写.现在,除了最简单的程序之外,所有的应用程序都需要与运行在其他异构 ...
- 2021升级版微服务教程6—Ribbon使用+原理+整合Nacos权重+实战优化 一篇搞定
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...
- SIGGRAPH Asia 2020 电脑动画节(CAF)获奖短片出炉!
电脑动画节(CAF) 是SIGGRAPH Asia盛会最受瞩目的环节之一.2020年12月15日,SIGGRAPH Asia 2020虚拟线上会议正式宣布了电脑动画节的三部获奖短片:最佳作品奖< ...
- 爬虫-urllib3模块的使用
urllib3是一个功能强大,对SAP健全的 HTTP客户端,许多Python生态系统已经使用了urllib3. 一.安装 sudo pips install urllib3 二.创建PoolMana ...
- AvaloniaUI体验
公司的原有的PC端WPF产品有跨平台需求,无奈微软自己的xamarin对wpf的支持当前尚未达到能支撑产品的成熟度,于是经过搜索,发现了一个号称用WPF实现跨平台的第三方图形库AvaloniaUI. ...
- 私有镜像仓库Harbor基础介绍与部署
企业级私有镜像仓库Harbor 一:介绍 Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为dock ...
- JCO RFC destination
一:登陆PI的GUI,进入事物SM59,创建T类型RFC destinations如下: AI_RUNTIME_JCOSERVER :used for the mapping runtime, va ...
- 如何创建一个 PostgreSQL 数据库?
PostgreSQL 官网截图 PostgreSQL 是什么? PostgreSQL 是一个功能非常强大的,历史悠久,开源的关系数据库.PostgreSQL支持大部分的SQL标准并且提供了很多其他现代 ...
- synchronized的jvm源码分析聊锁的意义
上篇写完了ReentrantLock源码实现,从我们的角度分析设计锁,在对比大神的实现,顺道拍了一波道哥的马屁,虽然他看不到,哈哈.这一篇我们来聊一聊synchronized的源码实现,并对比reen ...
- Mysql四种通信协议(linux下本地连接的都是socket 其他都是tcp)
Mysql通信协议 - 张冲andy - 博客园 https://www.cnblogs.com/andy6/p/6204579.html