【BZOJ】【2002】【HNOI2010】弹飞绵羊
呃这题的Hint写着splay启发式合并……但是蒟蒻不懂T_T只好写个简单的LCT来蒙混过关,就是时间效率上差劲的很……
不过能够一次AC心情也是蛮愉悦的~
- /**************************************************************
- Problem: 2002
- User: Tunix
- Language: C++
- Result: Accepted
- Time:1932 ms
- Memory:6156 kb
- ****************************************************************/
- //BZOJ 2002
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #define rep(i,n) for(int i=0;i<n;++i)
- #define F(i,j,n) for(int i=j;i<=n;++i)
- #define D(i,j,n) for(int i=j;i>=n;--i)
- using namespace std;
- const int N=;
- int c[N][],fa[N],size[N],n,m,k[N],st[N],top=;
- bool rev[N];
- int read(){
- char ch=getchar();
- int sig=,tmp=;
- while(ch<''||ch>'') {if (ch=='-') sig=-;ch=getchar();}
- while(ch>='' && ch<='') {tmp=*tmp+ch-'';ch=getchar();}
- return tmp*sig;
- }
- void Push_down(int x){
- if (rev[x]){
- rev[x]^=; rev[c[x][]]^=; rev[c[x][]]^=;
- swap(c[x][],c[x][]);
- }
- }
- inline void Push_up(int x){
- size[x]=size[c[x][]]+size[c[x][]]+;
- }
- bool isroot(int x){
- return c[fa[x]][]!=x && c[fa[x]][]!=x;
- }
- void rotate(int x){
- int y=fa[x],z=fa[y],l=c[y][]==x,r=l^;
- if (!isroot(y)) c[z][c[z][]==y]=x;
- fa[x]=z; fa[y]=x; fa[c[x][r]]=y;
- c[y][l]=c[x][r]; c[x][r]=y;
- Push_up(y); Push_up(x);
- }
- void splay(int x){
- top=; st[top++]=x;
- for(int i=x;!isroot(i);i=fa[i])
- st[top++]=fa[i];
- while(top--) Push_down(st[top]);
- while(!isroot(x)){
- int y=fa[x],z=fa[y];
- if (!isroot(y)){
- if (c[y][]==x^c[z][]==y) rotate(x);
- else rotate(y);
- }
- rotate(x);
- }
- }
- void access(int x){
- for(int t=;x;t=x,x=fa[x])
- splay(x),c[x][]=t,Push_up(x);
- }
- void makeroot(int x){
- access(x); splay(x); rev[x]^=;
- }
- int find(int x){
- access(x); splay(x);
- while(c[x][]) x=c[x][];
- return x;
- }
- void cut(int x,int y){
- makeroot(x); access(y); splay(y);
- if (c[y][]==x) c[y][]=fa[x]=;
- }
- void link(int x,int y){
- makeroot(x); fa[x]=y;
- }
- //LCT end
- int main(){
- // freopen("input.txt","r",stdin);
- n=read();
- F(i,,n){
- k[i]=read();
- link(i,min(i+k[i],n+));
- }
- m=read();
- int x,y,z;
- F(i,,m){
- x=read(); y=read(); y++;
- if (x==) {
- makeroot(n+);
- access(y);splay(y);
- printf("%d\n",size[y]-);
- }
- else if(x==){
- z=read();
- cut(y,min(y+k[y],n+));
- k[y]=z;
- link(y,min(y+k[y],n+));
- }
- }
- return ;
- }
【BZOJ】【2002】【HNOI2010】弹飞绵羊的更多相关文章
- [BZOJ 2002] [HNOI2010]弹飞绵羊(Link Cut Tree)
[BZOJ 2002] [HNOI2010]弹飞绵羊(Link Cut Tree) 题面 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一 ...
- bzoj 2002 Bounce 弹飞绵羊
bzoj 2002 Bounce 弹飞绵羊 设一个虚拟节点表示被弹飞,则每个点的后继点是唯一确定的,每个点向它的后继点连边,就形成了一颗树. 询问就是问某个节点到虚拟节点的路径长度,修改就删除原来向后 ...
- BZOJ 2002 Bounce 弹飞绵羊 (分块或动态树)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 13768 Solved: 6989[Subm ...
- BZOJ 2002 Bounce 弹飞绵羊 —— 分块算法
题目链接:https://vjudge.net/problem/HYSBZ-2002 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Li ...
- bzoj 2002 Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 11202 Solved: 5698[Subm ...
- 【bzoj 2002】弹飞绵羊
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- 2002. [HNOI2010]弹飞绵羊【LCT】
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- BZOJ 2002 HNOI2010 弹飞羊 块
标题效果,LCT解释版本:见 http://blog.csdn.net/popoqqq/article/details/38849471 如今,用一只手滑动块,并再次改写这个问题0.0 块短啊 将进入 ...
- BZOJ.2002.Bounce 弹飞绵羊(LCT)
题目链接 从一个点只能往后跳,即后继状态只有一个,那么拿nxt[x]做fa[x]啊!这样就成了一棵树,从每个点开始的答案是它到所在树的根节点的距离. nxt[]的更改即动态修改树边,用LCT即可. 这 ...
- P3203 [HNOI2010]弹飞绵羊(LCT)
P3203 [HNOI2010]弹飞绵羊 LCT板子 用一个$p[i]$数组维护每个点指向的下个点. 每次修改时cut*1+link*1就解决了 被弹出界时新设一个点,权为0,作为终点表示出界点.其他 ...
随机推荐
- FileUpload无法赋值解决方案
FileUpload无法赋值解决方案 编写人:CC阿爸 2015-1-27 今天在这里,我想与大家一起分享如何处理fileupload控件不能赋值的问题.有兴趣的同学,可以一同探讨与学习一下,否则就略 ...
- 【积硅计划】http协议基础
http:超文本传输协议,它允许将超文本标记(html)文档从web服务器传送到浏览器.目前版本HTTP/1.1 http请求过程: proxy:代理服务器,网络信息的中转站.功能如下: ...
- mysql 修改字段长度
mysql 修改字段长度 alter table news modify column title varchar(130); alter table 表名 modify column 字段名 类型 ...
- C++实现01串排序
题目内容:将01串首先按长度排序,长度相同时,按1的个数从少到多进行排序,1的个数相同时再按ASCII码值排序. 输入描述:输入数据中含有一些01串,01串的长度不大于256个字符. 输出描述:重新排 ...
- ubuntu12.04和deepin12.06使用root账户登录
修改lightdm.conf登录方式, 1.首先,激活root账户, 在终端中执行 sudo passwd root 连续两次输入 密码,即使root账户的密码,注意密码并不在终端中显示 2. 切 ...
- Python学习教程(learning Python)--1.4 Python数据处理基础
本节主要讨论数据操作及运算符等基础知识,熟悉C语言相关知识的读者请跳过此节. 在高级语言编程过程中,有了数据以后通常要对数据进行相应的数据处理,加.减.乘.除等基本运算,不难理解. 在Python里 ...
- node.js web开发:EXPRESS 4.x 以上使用session和cookie 的记录
关于session 和cookie 我搞了2-3天, 发现这个玩意也挺麻烦的. 很多教程都是把这种会话保存在nosql里面,比如mongo,或者redis等等.但是我还是想直接保存在计算机的内存中,比 ...
- C语言如何 实现 下雪效果
题外话 前言 1.本文主要围绕 如何 在 控制台上 下起 一场 只有自己能看见的雪 2.是个简易跨平台的,主要是C语言 3.动画 采用 1s 40帧, 雪花具有 x轴速度和y轴速度 4.比较简单,可 ...
- 苹果内付费 IAP
创建app内购买项目 消耗型项目:对于消耗型App内购买项目,用户每次下载时都必须进行购买.一次性服务通常属于消耗型项目,例如钓鱼App 中的鱼饵. 非消耗型项目:对于非消耗型App内购买项目,用户仅 ...
- 判断Check复选框是否选中
<div id="prm_div" style="font-size: 12px;" align="left"> <for ...