求助 /kel
查看原帖
求助 /kel
113190
Qiuly楼主2020/6/10 14:01

全 WA ,枯了

问一下 lct 这样写没有错吧 /kel

struct Link_Cut_Tree {
    int fa[N],las[N],tag[N],hep[N],ch[N][2];
    inline void update(int x,int v) {las[x]=tag[x]=v;}
    inline int get(int x) {return ch[fa[x]][0]==x||ch[fa[x]][1]==x;}
    inline void pushdown(int x) {update(ch[x][0],tag[x]),update(ch[x][1],tag[x]),tag[x]=0;}

    inline void rotate(int x) {
        int y=fa[x],z=fa[y],k=ch[y][1]==x,v=ch[x][!k];
        if(get(y)) ch[z][ch[z][1]==y]=x;ch[x][!k]=y,ch[y][k]=v;
        if(v) fa[v]=y;fa[y]=x,fa[x]=z;
    }
    inline void splay(int x) {
        int y=x,tmp=0;
        hep[++tmp]=y;
        while(get(y)) hep[++tmp]=y=fa[y];
        while(tmp) pushdown(hep[tmp--]);
        while(get(x)) {
            y=fa[x],tmp=fa[y];
            if(get(y)) rotate((ch[y][0]==x)^(ch[tmp][0]==y)?x:y);
            rotate(x);
        }
    }
    inline void access(int x,int r,int y=0) {
        for(;x;x=fa[y=x]) {
            splay(x),ch[x][1]=y;
            seg.modify(1,1,n,las[x]-sam.len[x]+1,las[x]-sam.len[sam.fa[x]],-1);
        }
        splay(y),update(y,r),seg.modify(1,1,n,1,r,1);
    }
} lct;
2020/6/10 14:01
加载中...