BZOJ_2002_弹飞绵羊_(LCT)
描述
http://www.lydsy.com/JudgeOnline/problem.php?id=2002
一列n个数,a[i]表示向后a[i]个,问第k个数进行多少次向后跳跃会飞出去.
分析
i连向i+a[i],那么我们建立一个森林,i是i+a[i]的一个子节点,如果i+a[i]>n,那么i连向null.这样对于节点k,问多少次飞出去,就是向上走多少个到null,也就是深度是多少,直接LCt处理.
注意:
1.这里的link并不以LCT中普遍的link.普通的link是将两个不想连的点连在一起,这样两棵树也就连在了一起.这里的link其实是改变父亲节点的意思.
#include <bits/stdc++.h>
using namespace std; const int maxn=+;
int n,m; struct node{
node* ch[],* pa;
int s;
node(node* t){ s=; ch[]=ch[]=pa=t; }
bool d(){ return pa->ch[]==this; }
bool c(){ return pa->ch[]==this||pa->ch[]==this; }
void setc(node* x,bool d){ ch[d]=x; x->pa=this; }
void push_up(){ s=ch[]->s+ch[]->s+; }
}* null,* t[maxn];
void rot(node* x){
node* pa=x->pa; bool d=x->d();
if(pa->c()) pa->pa->setc(x,pa->d());
else x->pa=pa->pa;
pa->setc(x->ch[!d],d);
x->setc(pa,!d);
pa->push_up();
}
void splay(node* x){
while(x->c())
if(!x->pa->c()) rot(x);
else x->d()==x->pa->d()?(rot(x->pa),rot(x)):(rot(x),rot(x));
x->push_up();
}
void access(node* x){
node* t=x;
for(node* y=null;x!=null;y=x, x=x->pa){
splay(x);
x->ch[]=y;
}
splay(t);
}
void link(node* x,node* y){
access(x);
x->ch[]->pa=null; x->ch[]=null; x->pa=y; x->push_up();
}
int main(){
null=new node(NULL); null->s=;
scanf("%d",&n);
for(int i=;i<n;i++) t[i]=new node(null);
for(int i=;i<n;i++){
int k; scanf("%d",&k);
if(i+k<n) t[i]->pa=t[i+k];
}
scanf("%d",&m);
for(int i=;i<=m;i++){
int q,x,y;
scanf("%d%d",&q,&x);
if(q==){
access(t[x]);
printf("%d\n",t[x]->s);
}
else{
scanf("%d",&y);
if(x+y<n) link(t[x],t[x+y]);
else link(t[x],null);
}
}
return ;
}
BZOJ_2002_弹飞绵羊_(LCT)的更多相关文章
- bzoj 2002 : [Hnoi2010]Bounce 弹飞绵羊 (LCT)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 题面: 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: ...
- P3203 [HNOI2010]弹飞绵羊(LCT)
P3203 [HNOI2010]弹飞绵羊 LCT板子 用一个$p[i]$数组维护每个点指向的下个点. 每次修改时cut*1+link*1就解决了 被弹出界时新设一个点,权为0,作为终点表示出界点.其他 ...
- BZOJ2002 Hnoi2010 Bounce 弹飞绵羊 【LCT】【分块】
BZOJ2002 Hnoi2010 Bounce 弹飞绵羊 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始, ...
- [BZOJ2002][洛谷P3203][Hnoi2010]Bounce 弹飞绵羊(LCT维护链长)
luogu传送门 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 16082 Solved: ...
- BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(LCT)
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在 他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装 ...
- 【BZOJ2002】 [Hnoi2010]Bounce 弹飞绵羊 分块/LCT
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在 他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装 ...
- 【BZOJ】2002: [Hnoi2010]Bounce 弹飞绵羊(lct)
http://www.lydsy.com/JudgeOnline/problem.php?id=2002 (BZOJ挂了,还没在BZOJ测,先是在wikioi测过了,,) 囧.在军训时立志要学lct! ...
- bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 [分块][LCT]
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- BZOJ2002:Bounce 弹飞绵羊(LCT)
某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当 ...
随机推荐
- js事件冒泡和事件委托
js事件冒泡 js所谓的事件冒泡就是子级元素的某个事件被触发,它的上级元素的该事件也被递归执行 html: <ul class="clearfix" data-type=&q ...
- strcpy(),string使用问题
两个CString,把一个赋值给另外一个,用strncpy出现问题,直接=赋值正确了,不知道为什么?
- php 一维数组排序,保留key值
function sort_with_keyName($arr,$orderby='desc'){ //在内存的另一处 $a 复制内容与 $arr 一样的数组 foreach($arr as $key ...
- textarea限定字数提示效果
最近工作中要实现的一个效果是:在textarea中输入字符会提示剩余多少字符可输入.于是马不停蹄的开始查阅资料. HTML代码: <table> <colgroup> < ...
- memcached一些整理
.NET中使用Memcached的相关资源整理 Memcached官方站点:http://www.danga.com/memcached/ Memcached Win32 1.2.6下载: ...
- 《Nodejs开发加密货币》之二十七:开发通用的HTML组件
人的懒惰常常是麻烦的开始.多数程序员都希望自己的工作一劳永逸,一次开发,到处使用,成了人人追逐的目标,我也不例外.最初写<Nodejs开发加密货币>系列文章,因为不喜欢设定好了去写,所以目 ...
- php获取汉字首字母的函数
本文介绍用php实现汉字转化为首字母的方法,主要功能是:功能明确,易于修改维护和扩展: 英文的字串:不变返回(包括数字):中文字符串:返回拼音首字符: 中英混合串: 返回拼音首字符和英文. 网上的方法 ...
- iframe 适用高度
contentWindow 兼容各个浏览器,可取得子窗口的 window 对象. contentDocument Firefox 支持,> ie8 的ie支持.可取得子窗口的 document ...
- RasAPI函数实现PPPOE拨号
unit uDial; interface uses Windows,Messages, SysUtils, Ras;// Classes; var //EntryName,UserName,Pass ...
- [旧博客]Python 第一次
决定学习Python,发现其需要安装的东西很小,只需要在官方网站下载和15MB左右的安装包,Python for windows.安装完毕就双击IDE快捷方式就打开IDE了. 你很发现IDE好像很面熟 ...