关于Splay

回复帖子

@Noir_  2021-05-04 10:44 回复

这两种写法为什么第一种是对的,第二种就会炸?

(就是那个f=fa[x]的位置)

inline void splay(int x){
    for(int f;f=fa[x];rotate(x)) 
        if(fa[f]){
            if(get_son(x)==get_son(f)) 
                rotate(f);
            else rotate(x);
        }
    root=x;
}


inline void splay(int x){
    for(int f;f;rotate(x)){
        f=fa[x];
        if(fa[f]){
            if(get_son(x)==get_son(f)) 
                rotate(f);
            else rotate(x);
        }
    } 
    root=x;
}
@Noir_  2021-05-04 11:07 回复 举报

@Ender_32k 不用了,谢谢我找到错了


inline void splay(int x){
    for(int f=fa[x];f;rotate(x)){
        f=fa[x];
        if(f==0) break;
        if(fa[f]){
            if(get_son(x)==get_son(f)) rotate(f);
            else rotate(x);
        }
    } 
    root=x;
}

改成这样就行了

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。