• 模板—LCT


    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define LL long long
    using namespace std;
    int f[100000],c[100000][2],st[100000];
    bool r[100000];
    #define l(x) c[x][0]
    #define r(x) c[x][1]
    inline bool nroot(int x){return c[f[x]][0]==x||c[f[x]][1]==x;}
    void pushup(int x){;}
    void pushr(int x){int t=l(x);l(x)=r(x);r(x)=t;r[x]^=1;}
    void pushdown(int x)
    {    
        if(!r[x])return;
        if(l(x))pushr(l(x));
        if(r(x))pushr(r(x));
        r[x]=0;
    }
    void rotate(int x)//
    {
        int y=f[x],z=f[y],k=r(y)==x,w=c[x][!k];    
        if(nroot(y))c[z][r(z)==y]=x;c[x][!k]=y;c[y][k]=w;
        if(w)f[w]=y;f[y]=x;f[x]=z;
        pushup(y);
    }
    void splay(int x)//
    {
        int y=x,z=0;st[++z]=y;
        while(nroot(y))st[++z]=y=f[y];
        while(z)pushdown(st[z--]);
        while(nroot(x))
        {
            y=f[x];z=f[y];
            if(nroot(y))rotate((l(y)==x)^(l(z)==y)?x:y);
            rotate(x);
        }
        pushup(x);
    }
    void access(int x){for(int y=0;x;x=f[y=x])splay(x),r(x)=y,pushup(x);}//
    void makeroot(int x){access(x);splay(x);pushr(x);}//
    int findroot(int x){access(x);splay(x);while(l(x))pushdown(x),x=l(x);splay(x);return x;}//
    void split(int x,int y){makeroot(x);access(y);splay(y);}//
    void link(int x,int y){makeroot(x);if(findroot(y)!=x)f[x]=y;}//
    void cut(int x,int y)
    {
        makeroot(x);
        if(findroot(y)==x&&f[y]==x&&!l(y))
        f[y]=r(x)=0,pushup(x);
    }
    int n,m;
    signed main()
    {    
        cin>>n>>m;
        char opt[10];int u,v;
        for(int i=1;i<=m;i++)
        {    
            cin>>opt;
            if(opt[0]=='C')cin>>u>>v,link(u,v);
            if(opt[0]=='D')cin>>u>>v,cut(u,v);
            if(opt[0]=='Q')
            {
                cin>>u>>v;
                if(findroot(u)==findroot(v))puts("Yes");
                else puts("No");
            }
        }
    }
    View Code
  • 相关阅读:
    软件原则
    Optional
    雪花算法原理
    AOP
    trycatchfinally
    lambda表达式
    BeanUtils属性转换工具
    @Transactional 失效
    用户线程&&守护线程
    卡顿问题
  • 原文地址:https://www.cnblogs.com/Al-Ca/p/11596837.html
Copyright © 2020-2023  润新知