题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4530

LCT维护子树 siz 。设 sm[ ] 表示轻儿子的 siz 和+1(1是自己的siz),siz[ ] 表示 splay 里 ( 两个儿子的 siz[ ] ) + sm[ cr ] 。在 access 里随便维护一下就好了。

一开始写的 siz[ ]  是 splay 里右儿子的 siz[ ] + sm[ cr ] ,但打 rev[ ]  的时候难以维护,所以弃了。

注意要先让一个点作为 splay 的根,再给它连右儿子,才能比较好地维护好;所以 link( ) 的时候注意 access( y ) !

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e5+5;
int n,Q,fa[N],c[N][2],siz[N],sm[N];
int sta[N],top;bool rev[N];
int rdn()
{int ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return fx?ret:-ret;
}
bool isroot(int x){return c[fa[x]][0]!=x&&c[fa[x]][1]!=x;}
void pshp(int x){siz[x]=sm[x]+siz[c[x][0]]+siz[c[x][1]];}
void Rev(int x)
{if(!rev[x])return;rev[x]=0;rev[c[x][0]]^=1;rev[c[x][1]]^=1;swap(c[x][0],c[x][1]);
}
void rotate(int x)
{int y=fa[x],z=fa[y],d=(x==c[y][1]);if(!isroot(y))c[z][y==c[z][1]]=x;fa[x]=z;fa[y]=x;fa[c[x][!d]]=y;c[y][d]=c[x][!d];c[x][!d]=y;pshp(y);pshp(x);
}
void splay(int x)
{sta[top=1]=x;for(int k=x;!isroot(k);k=fa[k])sta[++top]=fa[k];for(int i=top;i;i--)Rev(sta[i]);int y,z;while(!isroot(x)){y=fa[x];z=fa[y];if(!isroot(y))((x==c[y][0])^(y==c[z][0]))?rotate(x):rotate(y);rotate(x);}
}
void access(int x)
{int t=0;while(x){splay(x);sm[x]+=siz[c[x][1]];sm[x]-=siz[t];c[x][1]=t;pshp(x);/////t=x;x=fa[x];}
}
void makeroot(int x)
{access(x);splay(x);rev[x]^=1;
}
void link(int x,int y)
{makeroot(x);access(y);splay(y);//access()!!!fa[x]=y;sm[y]+=siz[x];siz[y]+=siz[x];
}
ll query(int x,int y)
{makeroot(x);access(y);splay(y);return (ll)siz[x]*sm[y];
}
int main()
{n=rdn();Q=rdn();for(int i=1;i<=n;i++)siz[i]=1,sm[i]=1;int x,y;char ch[3];while(Q--){scanf("%s",ch);x=rdn();y=rdn();if(ch[0]=='A')link(x,y);else printf("%lld\n",query(x,y));}return 0;
}

转载于:https://www.cnblogs.com/Narh/p/10140314.html

bzoj 4530 [Bjoi2014]大融合——LCT维护子树信息相关推荐

  1. BZOJ 4530 大融合 LCT维护子树信息

    题意: N<=1e5个点,Q<=1e5个操作. 支持加一条边(u,v)(保证图是森林).询问经过边(u,v)的简单路径条数(保证(u,v)存在). 分析: 数据结构学傻了的我,表示并不会用 ...

  2. 【uoj#207】共价大爷游长沙 随机化+LCT维护子树信息

    题目描述 给出一棵树和一个点对集合S,多次改变这棵树的形态.在集合中加入或删除点对,或询问集合内的每组点对之间的路径是否都经过某条给定边. 输入 输入的第一行包含一个整数 id,表示测试数据编号,如第 ...

  3. [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并

    [BZOJ4530][Bjoi2014]大融合 试题描述 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是 ...

  4. LCT维护子树信息(BZOJ4530:[BJOI2014]大融合)

    题面 没有权限号的可以去LOJ Sol 大家都知道,\(LCT\)上有许多实边和虚边 实边就是每棵\(Splay\)上的既认父亲又认儿子的边 虚边就是\(Splay\)和\(Splay\)之间只认父亲 ...

  5. [Bjoi2014]大融合

    [Bjoi2014]大融合 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 394  Solved: 244 [Submit][Status][Dis ...

  6. BZOJ 3639: Query on a tree VII LCT_set维护子树信息

    用 set 维护子树信息,细节较多. Code: #include <cstring> #include <cstdio> #include <algorithm> ...

  7. BZOJ4530:[BJOI2014]大融合

    Description 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够 联通的树上路过它 ...

  8. bzoj 3083 遥远的国度——树链剖分+线段树维护子树信息

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3083 int 的范围是 2^31 - 1 ,所以权值是不是爆 int 了-- O( nlog ...

  9. 洛谷P4219 大融合(LCT、虚子树)

    解析 本题需要用LCT维护子树大小 然后我就不会了 然后我就用树剖水过去了 又快又好写,真香 现在详细聊聊如何用LCT维护子树信息 每个结点再定义一个新的变量记录所有虚儿子的信息 然后-完了? 告别盲 ...

最新文章

  1. Calling Oracle stored procedures from Microsoft.NET
  2. Android图形子系统
  3. mysql dump xtrabackup_MySQL--备份恢复【Mysqdump+xtrabackup(XBK)】
  4. 在lean trace mode下运行function
  5. 线性表的定义与操作-顺序表,链式表(C语言)
  6. sql server的密码采用自带什么密码技术存储_【技术分享】浅谈MYSQL 8.0新特性
  7. Java教程:使用记事本编写运行Java程序
  8. 周志华-机器学习西瓜书-第三章习题3.3 编程实现对率回归
  9. c#使用正则表达式获取TR中的多个TD_Linux之正则表达式
  10. 京东一面:如何用 Nginx 禁止国外 IP 访问网站,直接凉凉!
  11. Apache --Tomcat 8下载与配置(Tomcat压缩包下载 Windows 7 x64)
  12. 新人学习opencv图像处理的笔记,一:c++操作图像放大
  13. 美国金融客户投诉数据分析
  14. ZYNQ芯片软硬件协同开发二:最简Linux操作系统的硬件部分设计
  15. windows神器,让你的效率直线提升
  16. 本题目要求读入2个整数A和B,然后输出它们的和
  17. LCD1602液晶显示屏的字符显示
  18. 解决农产品滞销难题,农村淘宝有何绝招?
  19. SharedPreferences使用及原理
  20. Linux Centos7:11.给系统增加一块硬盘

热门文章

  1. qsv格式爱奇艺视频知否如何转换成MP4格式
  2. 绘制ROC曲线95%置信区间
  3. Python学习之群发邮件
  4. sql语句,执行,实现没有这条数据就新增,如有这条数据就修改
  5. 系统集成项目管理工程师(软考中级)—— 第二十四章 收尾管理、知识产权、法规标准规范 笔记分享
  6. 基于Jenkins+git+gradle+pgyer的android持续集成
  7. 【shell案例】检测磁盘使用率
  8. jQuery,Html5前端特效资源精品大荟萃#001
  9. 4.《指数基金投资指南》读书笔记
  10. pp-vehicle车牌识别检测代码