P3203 [HNOI2010]弹飞绵羊

LCT板子

用一个$p[i]$数组维护每个点指向的下个点。

每次修改时cut*1+link*1就解决了

被弹出界时新设一个点,权为0,作为终点表示出界点。其他点点权为1。

然后统计一下路径就好辣

注意点的编号从0开始

#include<cstdio>
inline void Swap(int &a,int &b){a^=b^=a^=b;}
#define N 200005
int n,m,ch[N][],fa[N],s[N],rev[N],p[N];
#define lc ch[x][0]
#define rc ch[x][1]
inline bool nrt(int x){return ch[fa[x]][]==x||ch[fa[x]][]==x;}
inline void up(int x){s[x]=s[lc]+s[rc]+;}
inline void Rev(int x){Swap(lc,rc);rev[x]^=;}
inline void down(int x){if(rev[x]) Rev(lc),Rev(rc),rev[x]=;}
void pre(int x){if(nrt(x))pre(fa[x]); down(x);}
void turn(int x){
int y=fa[x],z=fa[y],l=(ch[y][]==x),r=l^;
if(nrt(y)) ch[z][ch[z][]==y]=x;
fa[ch[x][r]]=y ;fa[y]=x; fa[x]=z;
ch[y][l]=ch[x][r]; ch[x][r]=y;
up(y); up(x);
}
inline void splay(int x){
pre(x);
for(;nrt(x);turn(x)){
int y=fa[x],z=fa[y];
if(nrt(y)) turn(((ch[y][]==x)^(ch[z][]==y))?x:y);
}
}
inline void access(int x){for(int y=;x;y=x,x=fa[x])splay(x),rc=y,up(x);}
inline void makert(int x){access(x);splay(x);Rev(x);}
inline int find(int x){
access(x);splay(x);down(x);
while(lc) x=lc,down(x);
splay(x); return x;
}
inline void link(int x,int y){makert(x); if(find(y)!=x)fa[x]=y;}
inline void cut(int x,int y){
makert(x);
if(find(y)==x&&fa[y]==x&&!ch[y][]) fa[y]=rc=,up(x);
}
inline void split(int x,int y){makert(x);access(y);splay(y);}
int main(){
scanf("%d",&n); int q1,q2,q3;
for(int i=;i<=n;++i){
scanf("%d",&p[i]);
p[i]=p[i]+i>n ? n+:p[i]+i;
link(i,p[i]);
}
scanf("%d",&m);
while(m--){
scanf("%d%d",&q1,&q2);++q2;
if(q1==) split(n+,q2),printf("%d\n",s[q2]-);
else{
cut(q2,p[q2]);
scanf("%d",&q3);
p[q2]=q2+q3>n?n+:q2+q3;
link(q2,p[q2]);
}
}return ;
}

P3203 [HNOI2010]弹飞绵羊(LCT)的更多相关文章

  1. [Luogu P3203] [HNOI2010]弹飞绵羊 (LCT维护链的长度)

    题面 传送门:洛谷 Solution 这题其实是有类似模型的. 我们先考虑不修改怎么写.考虑这样做:每个点向它跳到的点连一条边,最后肯定会连成一颗以n+1为根的树(我们拿n+1代表被弹出去了).题目所 ...

  2. 洛谷P3203 [HNOI2010] 弹飞绵羊 [LCT]

    题目传送门 弹飞绵羊 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置, ...

  3. P3203 [HNOI2010]弹飞绵羊(LCT)

    弹飞绵羊 题目传送门 解题思路 LCT. 将每个节点的权值设为\(1\),连接\(i\)和\(i+ki\),被弹飞就连上\(n\),维护权值和\(sum[]\).从\(j\)弹飞需要的次数就是\(sp ...

  4. 洛谷 P3203 [HNOI2010]弹飞绵羊 解题报告

    P3203 [HNOI2010]弹飞绵羊 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一 ...

  5. P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?LCT?...FAQ orz

    好久没写博客了哈,今天来水一篇._(:з」∠)_ 题目 :弹飞绵羊(一道省选题) 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏 ...

  6. P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?

    好久没写博客了哈,今天来水一篇._(:з」∠)_ 题目 :弹飞绵羊(一道省选题) 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏 ...

  7. 洛谷P3203 [HNOI2010]弹飞绵羊(LCT,Splay)

    洛谷题目传送门 关于LCT的问题详见我的LCT总结 思路分析 首先分析一下题意.对于每个弹力装置,有且仅有一个位置可以弹到.把这样的一种关系可以视作边. 然后,每个装置一定会往后弹,这不就代表不存在环 ...

  8. BZOJ2002[Hnoi2010]弹飞绵羊——LCT

    题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...

  9. [洛谷P3203][HNOI2010]弹飞绵羊

    题目大意:有$n$个节点,第$i$个节点有一个弹力系数$k_i$,当到达第$i$个点时,会弹到第$i+k_i$个节点,若没有这个节点($i+k_i>n$)就会被弹飞.有两个操作: $x:$询问从 ...

随机推荐

  1. 用iframe嵌入了一个微信公众号平台文章的URL

    JS: $.ajaxPrefilter( function (options) { if (options.crossDomain && jQuery.support.cors) { ...

  2. CentOS6.5如何设置NAT网络方式

    如何设置虚拟机与外网的连通. 今天说一下NAT的配置方法,其它两个都比较简单. 1.配置CentOS的IP [root@mycentos ~]# vi /etc/sysconfig/network-s ...

  3. Django Form(表单)

    前台用 get 或 post 方法向后台提交一些数据. GET方法: html示例(保存在templates文件夹中): <!DOCTYPE html> <html> < ...

  4. vuex使用一

    至于为什么使用vuex在这里就不过多的解释了,直接进入正题 1.vuex的安装 cnpm install vuex -S 2.然后在main.js中引入 import Vue from 'vue' i ...

  5. LeetCode141.环形链表

    给定一个链表,判断链表中是否有环. 进阶:你能否不使用额外空间解决此题? /** * Definition for singly-linked list. * class ListNode { * i ...

  6. grad-cam 、cam 和热力图,基于keras的实现

    http://bindog.github.io/blog/2018/02/10/model-explanation/ http://www.sohu.com/a/216216094_473283 ht ...

  7. codeforces 957 A. Tritonic Iridescence

    题意: 给出一个字符串,要求任意两个相同的字母不能相同,问这个字符串是否能有两种或者两种以上的表现形式. 思路: 简单判断一下: 1.问号在端点: 2.连续两个问号或者以上: 3.一个问号两端的字母是 ...

  8. [NOIP2005普及组]采药(01背包)

    题目描述 描述 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到个到处都是草药的山洞里对他说 ...

  9. [openjudge-搜索]Knight Moves(翻译与题解)

    题目描述(翻译) somurolov先生,精彩的象棋玩家.声称任何人他都可以从一个位置到另一个骑士这么快.你能打败他吗? 问题 你的任务是写一个程序来计算一个骑士达到从另一点所需要的最少步数,这样你就 ...

  10. flask模板应用-javaScript和CSS中jinja2

    当程序逐渐变大时,很多时候我们需要在javaScript和CSS代码中使用jinja2提供的变量值,甚至是控制语句.比如,通过传入模板的theme_color变量来为页面设置主题色彩,或是根据用户是否 ...