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题解。

BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊 LCT

BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊 LCT

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

2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 5392  Solved: 2846 [...

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

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

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

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

BZOJ2002——[Hnoi2010]Bounce 弹飞绵羊

1、题目大意:就是给一个动态的森林求size域 2、分析: 这个就是一个动态树问题,对于每一个位置i有i+ki这个父亲, 于是这就是一个森林了,然后对于每一个修改直接lct维护就好,询问就是i到最外...

【BZOJ 2002】 [Hnoi2010]Bounce 弹飞绵羊

【BZOJ 2002】 [Hnoi2010]Bounce 弹飞绵羊 LCT模板题~

bzoj2002: [Hnoi2010]Bounce 弹飞绵羊

2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 10629  Solved: 5476 ...

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

2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 10761  Solved: 5542 [Su...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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