BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 LCT

原创 2016年12月13日 19:34:33

题目大意:给出一个森林,支持两个操作:修改边,输出点到所在树的根的距离

LCT裸题。操作挺少的,只有Link和Cut操作(所以和到一起写了),维护一下Size即可。

#include <cstdio>
#define N 200005
using namespace std;
struct Node{
    Node *ch[2],*pa;
    int s;
    void maintain(){s=ch[0]->s+ch[1]->s+1;}
    int dir(){return pa->ch[0]==this ? 0 : pa->ch[1]==this ? 1 : -1; }//判断当前点与父亲的关系
    Node();
}*null=new Node();
Node p[N];
Node :: Node(){pa=ch[0]=ch[1]=null; s=null?1:0;}
void Rotate(Node* o,int d){
    Node* k=o->ch[d^1]; int d2;
    o->ch[d^1]=k->ch[d]; k->ch[d]->pa=o;
    k->ch[d]=o;
    o->maintain(); k->maintain();
    if(~(d2=o->dir())) o->pa->ch[d2]=k;
    k->pa=o->pa; o->pa=k;
}
void Splay(Node *o){
    Node* p; int d;
    while(~(d=o->dir())){
        p=o->pa;
        if(p->dir()==d) Rotate(p->pa,d^1);
        Rotate(o->pa,d^1);
    }
    return ;
}
void Access(Node* o){//将o点到根的路径设置为“重链”
    Node* p=null;
    while(o!=null) {
        Splay(o);
        o->ch[1]=p; o->maintain();
        p=o; o=o->pa;
    }
    return ;
}
void Link(Node* x,Node* y){
    Access(x); Splay(x);
        x->ch[0]->pa=null;
        x->ch[0]=null; x->maintain();//Cut操作
    x->pa=y;
    return ;
}
int main(){
    int n;
    scanf("%d",&n);
    null->ch[0]=null->ch[1]=null->pa=null;
    for(int i=1;i<=n;i++){
        int x;
        scanf("%d",&x);
        if(i+x<=n) p[i].pa=&p[i+x];
    }
    int m;
    scanf("%d",&m);
    while(m--){
        int mode;
        scanf("%d",&mode);
        if(mode==1){
            int x;
            scanf("%d",&x); x++;
            Access(&p[x]); Splay(&p[x]);
            printf("%d\n",p[x].s);
        }
        else {
            int x,y;
            scanf("%d%d",&x,&y); x++;
            if(x+y<=n) Link(&p[x],&p[x+y]);
            else Link(&p[x],null);
        }
    }
    return 0;
}
版权声明:转载请注明:http://blog.csdn.net/YihAN_Z

初识lct——洛谷p3203 bzoj2002 [HNOI2010]BOUNCE 弹飞绵羊

题目大意:现在有n个装置,每个装置会弹到一个地方(编号一定在它之后),也可能直接弹了出去,动态修改会弹到的地方,和动态查询从一个装置出发多少次会被弹出去。...

【LCT】BZOJ2002(Hnoi2010)[Bounce 弹飞绵羊]题解

BZOJ2002题解。

【bzoj2002】【Hnoi2010】【Bounce 弹飞绵羊】【lct】

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

bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊 (LCT)

2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 5392  Solved: 2846 [...
  • whai362
  • whai362
  • 2015年08月14日 13:36
  • 520

bzoj2002: [Hnoi2010]Bounce 弹飞绵羊(lct)

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

[LCT]BZOJ 2002——[Hnoi2010]Bounce 弹飞绵羊

2002: [Hnoi2010]Bounce 弹飞绵羊题目描述某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在...
  • CHN_JZ
  • CHN_JZ
  • 2017年07月10日 15:35
  • 673

BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊 LCT

BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊 LCT
  • wzq_QwQ
  • wzq_QwQ
  • 2015年08月10日 13:41
  • 1431

bzoj2002 [Hnoi2010]Bounce 弹飞绵羊 (Link Cut Tree)

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

【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊

Description某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设...
  • w_yqts
  • w_yqts
  • 2017年03月31日 19:49
  • 154

[BZOJ]2002: [Hnoi2010]Bounce 弹飞绵羊 分块

Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 LCT
举报原因:
原因补充:

(最多只允许输入30个字)