新姿势,一般来讲LCT只能维护splay重边里的数据,而这里要求维护整颗子树的size

多维护一个sq表示当前点轻儿子的size和,si表示包括轻重边的整颗子树的大小

然后需要改sq的地方是link和access,link是因为给y下面挂了个连着虚边的x点,所以给y的sq加上x的size;acc是改变了splay的结构,把一条实边变虚,一条虚边变实,这样就需要在当前点的sq上加一个size减一个size

然后update需要稍微改一下,其他的就是LCT的板子

#include<iostream>
#include<cstdio>
using namespace std;
const int N=300005;
int n,q,s[N],top;
char o[5];
struct qwe
{
int c[2],f,si,sq,lz;
}t[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void pd(int x)
{
if(t[x].lz)
{
swap(t[x].c[0],t[x].c[1]);
t[t[x].c[0]].lz^=1;
t[t[x].c[1]].lz^=1;
t[x].lz=0;
}
}
void ud(int x)
{
t[x].si=t[t[x].c[0]].si+t[t[x].c[1]].si+1+t[x].sq;
}
bool srt(int x)
{
return t[t[x].f].c[0]!=x&&t[t[x].f].c[1]!=x;
}
void zhuan(int x)
{
int y=t[x].f,z=t[y].f,l=(t[y].c[0]!=x),r=l^1;
if(!srt(y))
t[z].c[t[z].c[0]!=y]=x;
t[x].f=z;
t[y].c[l]=t[x].c[r];
t[t[y].c[l]].f=y;
t[x].c[r]=y;
t[y].f=x;
ud(y);
ud(x);
}
void splay(int x)
{
top=0;
s[++top]=x;
for(int i=x;!srt(i);i=t[i].f)
s[++top]=t[i].f;
while(top)
pd(s[top--]);
while(!srt(x))
{
int y=t[x].f,z=t[x].f;
if(!srt(y))
{
if((t[y].c[0]==x)^(t[z].c[0]==y))
zhuan(x);
else
zhuan(y);
}
zhuan(x);
}
}
void acc(int x)
{
for(int i=0;x;i=x,x=t[x].f)
{
splay(x);
t[x].sq=t[x].sq+t[t[x].c[1]].si-t[i].si;
t[x].c[1]=i;
ud(x);
}
}
void mkrt(int x)
{
acc(x);
splay(x);
t[x].lz^=1;
}
void lk(int x,int y)
{
mkrt(x);
acc(y);
splay(y);
t[x].f=y;
t[y].sq+=t[x].si;
ud(y);
}
int main()
{
n=read(),q=read();
for(int i=1;i<=n;i++)
t[i].si=1;
while(q--)
{
scanf("%s",o+1);
int x=read(),y=read();
if(o[1]=='A')
lk(x,y);
else
{
mkrt(x);
acc(y);
splay(y);
printf("%lld\n",1ll*t[x].si*(t[y].si-t[x].si));
}
}
return 0;
}

bzoj 4530: [Bjoi2014]大融合【LCT】的更多相关文章

  1. BZOJ.4530.[BJOI2014]大融合(LCT)

    题目链接 BZOJ 洛谷 详见这 很明显题目是要求去掉一条边后两边子树sz[]的乘积. LCT维护的是链的信息,那么子树呢? 我们用s_i[x]来记录轻边连向x的子树的和(记作虚儿子),那么sum[x ...

  2. bzoj 4530 [Bjoi2014]大融合——LCT维护子树信息

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4530 LCT维护子树 siz .设 sm[ ] 表示轻儿子的 siz 和+1(1是自己的si ...

  3. BZOJ:4530: [Bjoi2014]大融合

    4530: [Bjoi2014]大融合 拿这题作为lct子树查询的练手.本来以为这会是一个大知识点,结果好像只是一个小技巧? 多维护一个虚边连接着的子树大小即可. #include<cstdio ...

  4. 【刷题】BZOJ 4530 [Bjoi2014]大融合

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

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

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

  6. [BJOI2014]大融合(LCT)

    题面 luogu bzoj是权限题.. 题解 \(LCT\)维护子树信息 因为\(LCT\)中有一些虚子树,\(splay\)维护不了. 所以要新开一个数组来记录 然后注意\(link\)时 是先\( ...

  7. 【BZOJ】4530: [Bjoi2014]大融合

    [题意]给定n个点的树,从无到有加边,过程中动态询问当前图某条边两端连通点数的乘积,n<=10^5. [算法]线段树合并+并查集 (||LCT(LCT维护子树信息 LCT维护子树信息(+启发式合 ...

  8. 【bzoj4530】[Bjoi2014]大融合 LCT维护子树信息

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

  9. Luogu4219 BJOI2014 大融合 LCT

    传送门 题意:写一个数据结构,支持图上连边(保证图是森林)和询问一条边两端的连通块大小的乘积.$\text{点数.询问数} \leq 10^5$ 图上连边,$LCT$跑不掉 支持子树$size$有点麻 ...

随机推荐

  1. MRP Force Reservation的作用

    生产单根据BOM计算出相应的物料需求,生产领料单stock.picking ( internal moves) Stock.picking使用工作流自动计算库存量,如果库存量够,则使用 test_as ...

  2. 走入asp.net mvc不归路:[4]说说Action有哪些常见成员

    一个控制器中,功能最终会落实到一个个Action中实现,最常见的是增删查改操作.这些Action是一个个的方法,一般返回值是ActionResult,并且是public 方法,可以带参数,可以添加元标 ...

  3. Visual Studio自动生成文件版本信息

    一.     前言 通常,要控制输出文件的版本信息,只需要手动修改资源rc文件中的Version,即可在输出文件的文件属性里查看到对应的版本信息.如下图:    但是,版本号是会随时都更新的,每次bu ...

  4. HBase运维基础--元数据逆向修复原理

    背景 鉴于上次一篇文章——“云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据”的读者反馈,对HBase的逆向工程比较感兴趣,并咨询如何使用相应工具进行运维等等.总的来说,就是想更深层 ...

  5. 区分虚拟机和machine simulator

    1 虚拟机和machine simulator的不同 虚拟机是让多个操作系统同时共用现有的硬件架构,它不会模拟新的硬件架构.qemu这样的模拟器是模拟新的硬件架构,这个架构和host不同.

  6. 利用WebViewJavascriptBridge与UIWebView进行交互

    事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...

  7. Vue : props 使用细节(父组件传递数据给子组件)

    props使用细节 在Vue.js中我们可以使用 props 实现父组件传递数据给子组件,下面我们总结一下props的使用细节 1.基础类型检查 2.必填数据 3.默认值 4.自定义验证函数 其中每一 ...

  8. bzoj3136: [Baltic2013]brunhilda

    这个题为什么会放在数据结构啊 首先因为有决策包容性,对于一个n每次必然选择一个n%p最大的p,令n减n%p 设fi表示i变成0的步数的话,同样我们可以知道f是有单调性的 假如fd能转移到fk,首先d一 ...

  9. POJ 2739 Sum of Consecutive Prime Numbers( *【素数存表】+暴力枚举 )

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19895 ...

  10. codeforces 460B Little Dima and Equation 解题报告

    题目链接:http://codeforces.com/problemset/problem/460/B 题目意思:给出a, b, c三个数,要你找出所有在 1 ≤ x ≤ 1e9 范围内满足 x =  ...