2002: [Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊
https://www.lydsy.com/JudgeOnline/problem.php?id=2002
分析:
绵羊在弹飞的路径中相当于一棵树,这棵树需要更改形态,删一条边,加一条边,所以LCT维护一下。
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 5 inline int read() { 6 int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1; 7 for (;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f; 8 } 9 10 const int N = 200100; 11 int ch[N][2],fa[N],rev[N],val[N],siz[N],sk[N],a[N],Top,n; 12 13 void pushup(int x) { 14 siz[x] = siz[ch[x][0]] + siz[ch[x][1]] + 1; 15 } 16 void pushdown(int x) { 17 if (rev[x]) { 18 rev[ch[x][0]] ^= 1; rev[ch[x][1]] ^= 1; 19 swap(ch[x][0], ch[x][1]); 20 rev[x] ^= 1; 21 } 22 } 23 bool isroot(int x) { 24 return ch[fa[x]][0] != x && ch[fa[x]][1] != x; 25 } 26 int son(int x) { 27 return x == ch[fa[x]][1]; 28 } 29 void rotate(int x) { 30 int y = fa[x],z = fa[y],b = son(x),c = son(y),a = ch[x][!b]; 31 if (!isroot(y)) ch[z][c] = x;fa[x] = z; 32 ch[x][!b] = y;fa[y] = x; 33 ch[y][b] = a;if (a) fa[a] = y; 34 pushup(y);pushup(x); 35 } 36 void splay(int x) { 37 sk[Top = 1] = x; 38 for (int i=x; !isroot(i); i=fa[i]) sk[++Top] = fa[i]; 39 while (Top) pushdown(sk[Top--]); 40 while (!isroot(x)) { 41 int y = fa[x]; 42 if (isroot(y)) rotate(x); 43 else { 44 if (son(x) == son(y)) rotate(y), rotate(x); 45 else rotate(x), rotate(x); 46 } 47 } 48 } 49 void access(int x) { 50 for (int last=0; x; last=x, x=fa[x]) { 51 splay(x); ch[x][1] = last; pushup(x); 52 } 53 } 54 void makeroot(int x) { 55 access(x); splay(x); rev[x] ^= 1; 56 } 57 int find(int x) { 58 access(x); splay(x); 59 while (ch[x][0]) x = ch[x][0]; 60 return x; 61 } 62 void link(int x,int y) { 63 makeroot(x); 64 fa[x] = y; 65 } 66 void cut(int x,int y) { 67 makeroot(x); access(y); splay(y); 68 if (fa[x] == y && !ch[x][1]) fa[x] = ch[y][0] = 0; 69 } 70 71 void query() { 72 makeroot(n + 1); 73 int p = read() + 1; 74 access(p); 75 splay(p); 76 printf("%d\n",siz[p] - 1); 77 } 78 void change() { 79 int p = read() + 1,x = read(),t = p+x > n+1 ? n+1: p+x; // --- 判断是否大于n+1,不判luogu上80 80 cut(p,a[p]); 81 a[p] = t; 82 link(p,a[p]); 83 } 84 85 int main() { 86 n = read(); 87 for (int i=1; i<=n; ++i) { 88 a[i] = i + read(); 89 a[i] = a[i] > n+1 ? n+1 : a[i]; 90 } 91 for (int i=1; i<=n; ++i) link(i,a[i]); 92 int m = read(); 93 while (m--) { 94 int opt = read(); 95 if (opt == 1) query(); 96 else change(); 97 } 98 return 0; 99 }
转载于:https://www.cnblogs.com/mjtcn/p/9301369.html
2002: [Hnoi2010]Bounce 弹飞绵羊相关推荐
- bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 10761 Solved: 5542 [Su ...
- [BZOJ 2002][Hnoi2010]Bounce 弹飞绵羊(分块)
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
[HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- HYSBZ - 2002 :Bounce 弹飞绵羊 (分块算法)
Bounce 弹飞绵羊 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- [HNOI2010]BOUNCE 弹飞绵羊
题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...
- BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(LCT)
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在 他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装 ...
- bzoj2002 [Hnoi2010]Bounce 弹飞绵羊【LCT】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 第一道LCT,调了3天,发现是智障bug,我的青春... 主要参考了黄学长的代码,也没 ...
- BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊
n<=200000个点,从i会跳到$i+num_i$,保证$num_i>0$,m<=100000个两种操作:一.修改一个$num$:二.问从$i$开始跳多少步跳出这个序列. 大概是L ...
最新文章
- 全面解析多种区块链隐私保护解决方案
- Perl中的正则表达式
- Servlet 与 CGI 的比较
- LeetCode 300最长递增子序列
- python 函数
- 移动创业者,这么多免费资源,你不要?
- 去掉 AD13 PCB网络连线中的双斜杠
- 程序员值得提升的沟通小技巧!
- 怎么看rx580是不是470刷的_AMD RX470/570强刷RX580完整图文教程(附文件下载及查BIOS攻略)...
- 3.2、关于Support for password authentication was removed on August 13, 2021报错的解决方案
- 一文带你了解什么是CDN
- 2021年安全员-C证(陕西省)考试总结及安全员-C证(陕西省)模拟考试系统
- 2021信息安全工程师学习笔记(四)
- 惊!西游记内幕竟是这样的。
- 基于Win10的Peach下载安装以及Modbus模糊测试
- Win10更改账户类型为标准改不了怎么办
- Dpabi数据分析的结构
- 基于STM32智能人体红外和声音感应声光控开关设计
- matlab qpsk 星座图,【求助】如何画QPSK信号的星座图?各位高手帮帮忙啊!小弟...
- 事件抽取与事理图谱(二)
热门文章
- ldap导入mysql_openLDAP 部署(亲测可用)
- 在计算机硬盘中没有什么,如果在打开计算机后找不到硬盘,应该怎么办?
- win7配置计算机失败怎么办,电脑win7配置失败 还原更新 怎么处理 不要说重装
- php去字符串空格,php怎么去掉字符串中空格
- python为text添加滚动条_Python GUI编程(Tkinter)7、带滚动条的Text
- pandas concat_pandas合并几百个csv只需要一分钟?(含代码,拿去即可用)
- grep 显示前后几行
- Eclipse中svn插件:Subclipse插件安装
- 怎么改vue项目的标题_如何动态修改Vue项目中的页面title
- python综合管理系统_学生综合信息管理系统