标签:int void tot son fa 计划 Pushup 板子
LCT*1
struct LCT_Tree{
#define lch V[p].son[0]
#define rch V[p].son[1]
#define Isroot(p) (V[V[p].fa].son[0]!=p && V[V[p].fa].son[1]!=p)
#define Son(p) (V[V[p].fa].son[1]==p)
struct Vertex{int son[2],siz,sum,t1,fa;}V[maxn];
int tot;
int New(int x,int fa){++tot;V[tot].sum=x;V[tot].siz=1;V[tot].fa=fa;return tot;}
void Pushup(int p){V[p].siz=V[lch].siz+V[rch].siz+1;}
void Upt1(int p){swap(lch,rch);V[p].t1^=1;}
void Pusht1(int p){if(V[p].t1)Upt1(lch),Upt1(rch),V[p].t1=0;}
void Pushdown(int p){Pusht1(p);}
void Spread(int p){if(!Isroot(p))Spread(V[p].fa);Pushdown(p);}
void Rotate(int p){
int f=V[p].fa,lf=V[f].fa,s=Son(p),ls=Son(f);
if(!Isroot(f))V[lf].son[ls]=p;
V[f].son[s]=V[p].son[s^1],V[V[p].son[s^1]].fa=f;
V[p].son[s^1]=f,V[f].fa=p;
V[p].fa=lf;
Pushup(f),Pushup(p);
}
void Splay(int p){
Spread(p);
for(int f=V[p].fa;!Isroot(f);f=V[p].fa){
if(!Isroot(f))Rotate( Son(f) == Son(p) ? f : p );
}
}
void Access(int x){int p;for(p=0;x;p=x,x=V[x].fa)Splay(x),V[x].son[1]=p,Pushup(x);}
void Makeroot(int x){Access(x);Splay(x);Upt1(x);}
int Findroot(int p){Access(p);Splay(p);Pushdown(p);while(V[p].son[0])p=lch,Pushdown(p);return p;}
void Split(int x,int y){Makeroot(x),Access(y);Splay(y);}
void Link(int x,int y){Makeroot(x);V[x].fa=y;}
void Cut(int x,int y){Split(x,y);if(V[y].son[0]==x)V[y].son[0]=V[x].fa=0;Pushup(y);}
}L;
标签:int,void,tot,son,fa,计划,Pushup,板子 来源: https://www.cnblogs.com/Delov/p/16516132.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。