题意:

给出n个节点 及其父亲 和m个指令1:表示求节点i到根节点(n+1)的距离2:表示将节点i的父亲更换为j

题解:

动态树link、cut、access模板题 貌似没什么难度- -

代码:

 #include <cstdio>
struct info{
int fat,root,lc,rc,num;
info(const int a=,const int b=,const int c=,const int d=,const int e=):
fat(a),root(b),lc(c),rc(d),num(e){}
};
int n,m;
info tree[];
void clean(){
tree[]=info(,,,,);
}
void makenum(int t){
tree[t].num=+tree[tree[t].lc].num+tree[tree[t].rc].num;
}
void left(int t){
int fa=tree[t].fat,r=tree[t].rc;
tree[t].rc=tree[r].lc;
tree[tree[r].lc].fat=t;
tree[r].lc=t;
tree[t].fat=r;
if (tree[t].root){
tree[t].root=;
tree[r].root=;
}else if (tree[fa].lc==t) tree[fa].lc=r;
else tree[fa].rc=r;
tree[r].fat=fa;
clean();
makenum(t);
makenum(r);
}
void right(int t){
int fa=tree[t].fat,l=tree[t].lc;
tree[t].lc=tree[l].rc;
tree[tree[l].rc].fat=t;
tree[l].rc=t;
tree[t].fat=l;
if (tree[t].root){
tree[t].root=;
tree[l].root=;
}else if (tree[fa].lc==t) tree[fa].lc=l;
else tree[fa].rc=l;
tree[l].fat=fa;
clean();
makenum(t);
makenum(l);
}
void splay(int t){
while (!tree[t].root){
int fa=tree[t].fat,gr=tree[fa].fat;
if (tree[fa].root){
if (tree[fa].lc==t) right(fa);
else left(fa);
}else if (tree[gr].lc==fa){
if (tree[fa].lc==t) right(gr),right(fa);
else left(fa),right(gr);
}else if (tree[fa].rc==t) left(gr),left(fa);
else right(fa),left(gr);
}
}
void access(int x){
int y=x;
x=;
do{
splay(y);
tree[tree[y].rc].root=;
tree[y].rc=x;
tree[x].root=;
clean();
makenum(y);
x=y;
y=tree[x].fat;
}while (y);
}
void change(int x,int y){
access(x);
splay(x);
tree[tree[x].lc].fat=;
tree[tree[x].lc].root=;
tree[x].lc=;
tree[x].fat=y;
clean();
access(x);
}
int main(){
freopen("bz2002.in","r",stdin);
freopen("bz2002.out","w",stdout);
int i,x,y,z;
scanf("%d\n",&n);
for (i=;i<=n;i++){
scanf("%d",&x);
x+=i;
if (x<=n) tree[i].fat=x;
else tree[i].fat=n+;
}
scanf("%d\n",&m);
for (i=;i<=m;i++){
scanf("%d%d",&x,&y);
++y;
if (x==){
scanf("%d",&z);
change(y,y+z);
}else{
access(y);
splay(y);
printf("%d\n",tree[tree[y].lc].num);
}
}
fclose(stdin);
fclose(stdout);
}

【bz2002】弹飞绵羊的更多相关文章

  1. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 9071  Solved: 4652[Submi ...

  2. 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊 link-cut-tree

    2016-05-30 11:51:59 用一个next数组,记录点x的下一个点是哪个 查询时,moveroot(n+1),access(x),splay(x) ,输出size[ch[x][0]]即为答 ...

  3. 【BZOJ 2002】【Hnoi 2010】弹飞绵羊 分块||Link Cut Tree 两种方法

    ShallWe,Yveh,hmy,DaD3zZ,四人吃冰糕从SLYZ超市出来后在马路上一字排开,,,吃完后发现冰糕棍上写着:“向狮子座表白:愿做你的小绵羊”,,, 好吧在这道题里我们要弹飞绵羊,有分块 ...

  4. BZOJ-2002 弹飞绵羊 Link-Cut-Tree (分块)

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 6801 Solved: 3573 [Submi ...

  5. 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊 分块

    [bzoj2002][Hnoi2010]Bounce 弹飞绵羊 2014年7月30日8101 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀 ...

  6. c++之路进阶——codevs2333(弹飞绵羊)

    2333 弹飞绵羊 2010年省队选拔赛湖南  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master       题目描述 Description Lostmonk ...

  7. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 分块

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOn ...

  8. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 LCT

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOn ...

  9. bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊 動態樹

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 4055  Solved: 2172[Submi ...

  10. Bounce 弹飞绵羊

    Bounce 弹飞绵羊 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 分块 将整个大区间分成若干块,每个点维护到下一个块需要跳的次 ...

随机推荐

  1. Tomcat启动后访问首页报错 显示JSP 空指针异常

    HTTP Status 500 - type Exception report message description The server encountered an internal error ...

  2. HTML CSS3 手风琴菜单

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...

  3. WIN7 64位系统搭建WINCE6.0系统遇到的问题

    WIN7 64位系统搭建WINCE6.0系统遇到的问题 安装顺序如下: .先装Visual Studio2005: .安装Visual Studio2005 Service Pack 1: .安装Vi ...

  4. C# WebBrowser准确判断网页最终装载完毕

    == 最近写了个软件叫WebAutoScript,目的用于,网页的自动操作处理,就是说,所有你在网页上面的操作,都可以录到一个脚本中,然后可以回放这个操作过程..我是说任何过程. 程序是用C#写的,其 ...

  5. CentOS5.5 正式开始安装 Oracle 11g r2(图形界面安装)

    一.下载oracle 官方网站, 可以下载最新版本 Oracle Database 11g Release http://www.oracle.com/index.html CentOS5. i386 ...

  6. poj 1185 炮兵阵地(三维状态压缩dP)

    题目:http://poj.org/problem?id=1185 思路: d[i][j][k]表示第i行的状态为第k个状态,第i-1行的状态为第j个状态的时候 的炮的数量. 1表示放大炮, 地形状态 ...

  7. 函数get_table_share

    得到一个table_share 1)先从table_def_cache中查找, 如果有, 直接返回 2)如果没有找到,    为table_share分配内存,初始化,打开.frm文件,并将share ...

  8. sql Server 的基本函数

    --聚合函数 use pubs go select avg(distinct搜索 price) --算平均数 from titles where type='business' go use pubs ...

  9. 前端SPA框架一些看法

    说起前端框架,我个人主张有框架不如无框架,这个观点要先从框架和库的区别说起. 我所理解的库,解决的是代码或是模块级别的复用或者对复杂度的封装问题;而框架,更多的是对模式级别的复用和对程序组织的规范,这 ...

  10. JS调用客户端EXE

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...