P3203 [HNOI2010]弹飞绵羊

LCT板子

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

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

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

然后统计一下路径就好辣

注意点的编号从0开始

  1. #include<cstdio>
  2. inline void Swap(int &a,int &b){a^=b^=a^=b;}
  3. #define N 200005
  4. int n,m,ch[N][],fa[N],s[N],rev[N],p[N];
  5. #define lc ch[x][0]
  6. #define rc ch[x][1]
  7. inline bool nrt(int x){return ch[fa[x]][]==x||ch[fa[x]][]==x;}
  8. inline void up(int x){s[x]=s[lc]+s[rc]+;}
  9. inline void Rev(int x){Swap(lc,rc);rev[x]^=;}
  10. inline void down(int x){if(rev[x]) Rev(lc),Rev(rc),rev[x]=;}
  11. void pre(int x){if(nrt(x))pre(fa[x]); down(x);}
  12. void turn(int x){
  13. int y=fa[x],z=fa[y],l=(ch[y][]==x),r=l^;
  14. if(nrt(y)) ch[z][ch[z][]==y]=x;
  15. fa[ch[x][r]]=y ;fa[y]=x; fa[x]=z;
  16. ch[y][l]=ch[x][r]; ch[x][r]=y;
  17. up(y); up(x);
  18. }
  19. inline void splay(int x){
  20. pre(x);
  21. for(;nrt(x);turn(x)){
  22. int y=fa[x],z=fa[y];
  23. if(nrt(y)) turn(((ch[y][]==x)^(ch[z][]==y))?x:y);
  24. }
  25. }
  26. inline void access(int x){for(int y=;x;y=x,x=fa[x])splay(x),rc=y,up(x);}
  27. inline void makert(int x){access(x);splay(x);Rev(x);}
  28. inline int find(int x){
  29. access(x);splay(x);down(x);
  30. while(lc) x=lc,down(x);
  31. splay(x); return x;
  32. }
  33. inline void link(int x,int y){makert(x); if(find(y)!=x)fa[x]=y;}
  34. inline void cut(int x,int y){
  35. makert(x);
  36. if(find(y)==x&&fa[y]==x&&!ch[y][]) fa[y]=rc=,up(x);
  37. }
  38. inline void split(int x,int y){makert(x);access(y);splay(y);}
  39. int main(){
  40. scanf("%d",&n); int q1,q2,q3;
  41. for(int i=;i<=n;++i){
  42. scanf("%d",&p[i]);
  43. p[i]=p[i]+i>n ? n+:p[i]+i;
  44. link(i,p[i]);
  45. }
  46. scanf("%d",&m);
  47. while(m--){
  48. scanf("%d%d",&q1,&q2);++q2;
  49. if(q1==) split(n+,q2),printf("%d\n",s[q2]-);
  50. else{
  51. cut(q2,p[q2]);
  52. scanf("%d",&q3);
  53. p[q2]=q2+q3>n?n+:q2+q3;
  54. link(q2,p[q2]);
  55. }
  56. }return ;
  57. }

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. 配置android.support.v7.widget.Toolbar 搜索框样式

    AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...

  2. [LeetCode] 374. Guess Number Higher or Lower_Easy tag: Binary Search

    We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...

  3. 转: Java LinkedList基本用法

    LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.LinkedList的构造函数如下1. public LinkedList():  ——生成空的链表2. publ ...

  4. CentOS6.5安装python3.7

    1.下载python3 wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz 2.解压 [root@mycentos ~]# ta ...

  5. Go linux 实践3

    Go 的灵魂-goroutine(协程), channel(渠道) 看看吧,不多说了 ************************************************ package ...

  6. JavaScriptSerializer的日期转换方案

    1.转换后过滤替换(通用) /// <summary> /// 日期转换 /// </summary> /// <param name="str"&g ...

  7. SQL Server之获取下周一的日期

    今天项目中需要得到下周一的日期,故想到了一种解决办法,用slq语句解决了.当然实现方法肯定不只有这一种. -(select DATEPART(weekday,getdate())) /*下周一差几天 ...

  8. 35.HTML--网页自动跳转 5种方法

    网页自动跳转 5种方法 利用HTML标记(META中的REFRESH属性) 用HTML标记,就是用META的REFRESH标记,举例如下: <meta http-equiv=refresh co ...

  9. 34.js----JS 开发者必须知道的十个 ES6 新特性

    JS 开发者必须知道的十个 ES6 新特性 这是为忙碌的开发者准备的ES6中最棒的十个特性(无特定顺序): 默认参数 模版表达式 多行字符串 拆包表达式 改进的对象表达式 箭头函数 =&> ...

  10. teragen/terasort_简化版

    1, 关闭Hadoop安全模式 进入hdfs用户 su – hdfs Cd /opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/bin hdfs dfs ...