P3203 [HNOI2010]弹飞绵羊(LCT)
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)的更多相关文章
- [Luogu P3203] [HNOI2010]弹飞绵羊 (LCT维护链的长度)
题面 传送门:洛谷 Solution 这题其实是有类似模型的. 我们先考虑不修改怎么写.考虑这样做:每个点向它跳到的点连一条边,最后肯定会连成一颗以n+1为根的树(我们拿n+1代表被弹出去了).题目所 ...
- 洛谷P3203 [HNOI2010] 弹飞绵羊 [LCT]
题目传送门 弹飞绵羊 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置, ...
- P3203 [HNOI2010]弹飞绵羊(LCT)
弹飞绵羊 题目传送门 解题思路 LCT. 将每个节点的权值设为\(1\),连接\(i\)和\(i+ki\),被弹飞就连上\(n\),维护权值和\(sum[]\).从\(j\)弹飞需要的次数就是\(sp ...
- 洛谷 P3203 [HNOI2010]弹飞绵羊 解题报告
P3203 [HNOI2010]弹飞绵羊 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一 ...
- P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?LCT?...FAQ orz
好久没写博客了哈,今天来水一篇._(:з」∠)_ 题目 :弹飞绵羊(一道省选题) 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏 ...
- P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?
好久没写博客了哈,今天来水一篇._(:з」∠)_ 题目 :弹飞绵羊(一道省选题) 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏 ...
- 洛谷P3203 [HNOI2010]弹飞绵羊(LCT,Splay)
洛谷题目传送门 关于LCT的问题详见我的LCT总结 思路分析 首先分析一下题意.对于每个弹力装置,有且仅有一个位置可以弹到.把这样的一种关系可以视作边. 然后,每个装置一定会往后弹,这不就代表不存在环 ...
- BZOJ2002[Hnoi2010]弹飞绵羊——LCT
题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...
- [洛谷P3203][HNOI2010]弹飞绵羊
题目大意:有$n$个节点,第$i$个节点有一个弹力系数$k_i$,当到达第$i$个点时,会弹到第$i+k_i$个节点,若没有这个节点($i+k_i>n$)就会被弹飞.有两个操作: $x:$询问从 ...
随机推荐
- 配置android.support.v7.widget.Toolbar 搜索框样式
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...
- [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 ...
- 转: Java LinkedList基本用法
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.LinkedList的构造函数如下1. public LinkedList(): ——生成空的链表2. publ ...
- 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 ...
- Go linux 实践3
Go 的灵魂-goroutine(协程), channel(渠道) 看看吧,不多说了 ************************************************ package ...
- JavaScriptSerializer的日期转换方案
1.转换后过滤替换(通用) /// <summary> /// 日期转换 /// </summary> /// <param name="str"&g ...
- SQL Server之获取下周一的日期
今天项目中需要得到下周一的日期,故想到了一种解决办法,用slq语句解决了.当然实现方法肯定不只有这一种. -(select DATEPART(weekday,getdate())) /*下周一差几天 ...
- 35.HTML--网页自动跳转 5种方法
网页自动跳转 5种方法 利用HTML标记(META中的REFRESH属性) 用HTML标记,就是用META的REFRESH标记,举例如下: <meta http-equiv=refresh co ...
- 34.js----JS 开发者必须知道的十个 ES6 新特性
JS 开发者必须知道的十个 ES6 新特性 这是为忙碌的开发者准备的ES6中最棒的十个特性(无特定顺序): 默认参数 模版表达式 多行字符串 拆包表达式 改进的对象表达式 箭头函数 =&> ...
- teragen/terasort_简化版
1, 关闭Hadoop安全模式 进入hdfs用户 su – hdfs Cd /opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/bin hdfs dfs ...