4530: [Bjoi2014]大融合

拿这题作为lct子树查询的练手。本来以为这会是一个大知识点,结果好像只是一个小技巧?

多维护一个虚边连接着的子树大小即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 210010
using namespace std; int p,ca,f;
inline int read(){
p=;ca=getchar();f=;
while(ca<''||ca>'') {if (ca=='-') f=-;ca=getchar();}
while(ca>=''&&ca<='') p=p*+ca-,ca=getchar();
return p*f;
}
struct na{
int y,ne,c,nu;
}b[MN*];
int fa[MN],n,t,x,y,c,num,id[MN],key[MN],ch[MN][],ma[MN],st[MN],Si[MN],si[MN];
bool rt[MN],rev[MN];
inline int max(int a,int b){return a>b?a:b;}
inline void up(int x){si[x]=si[ch[x][]]+si[ch[x][]]+Si[x]+;}
inline void pd(int x){if (rev[x]) swap(ch[x][],ch[x][]),rev[ch[x][]]^=,rev[ch[x][]]^=,rev[x]=;}
inline void rot(int x){
int y=fa[x],kind=ch[y][]==x;
fa[x]=fa[y];
fa[y]=x;
ch[y][kind]=ch[x][!kind];
fa[ch[y][kind]]=y;
ch[x][!kind]=y;
if(rt[y]) rt[y]=,rt[x]=;else ch[fa[x]][ch[fa[x]][]==y]=x;
up(y);up(x);
}
inline void splay(int x){
int i=x,to=;
while (!rt[i]) st[++to]=i,i=fa[i];pd(i);
for (;to;to--) pd(st[to]);
while(!rt[x]){
if (rt[fa[x]]) rot(x);else
if ((ch[fa[fa[x]]][]==fa[x])==(ch[fa[x]][]==x)) rot(fa[x]),rot(x);else rot(x),rot(x);
}
}
inline void acc(int u){
int x=;
while(u){
splay(u);
Si[u]+=si[ch[u][]]-si[x];
rt[ch[u][]]=;rt[ch[u][]=x]=;
up(u);
u=fa[x=u];
}
}
inline void root(int x){acc(x);splay(x);rev[x]^=;}
inline void link(int x,int y){
root(x);acc(y);splay(y);
fa[x]=y;Si[y]+=si[x];
}
inline int qu(int x,int y){
root(x);acc(y);
return (Si[x]+)*(Si[y]+);
}
char ss[];
int main(){
n=read();t=read();
for (int i=;i<=n;i++) rt[i]=si[i]=;
while(t--){
scanf("%s",ss);
x=read();y=read();
if (ss[]=='Q') printf("%d\n",qu(x,y));else link(x,y);
}
}

BZOJ:4530: [Bjoi2014]大融合的更多相关文章

  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]大融合

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

  4. bzoj 4530: [Bjoi2014]大融合【LCT】

    新姿势,一般来讲LCT只能维护splay重边里的数据,而这里要求维护整颗子树的size 多维护一个sq表示当前点轻儿子的size和,si表示包括轻重边的整颗子树的大小 然后需要改sq的地方是link和 ...

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

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

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

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

  7. BZOJ_4530_[Bjoi2014]大融合_LCT

    BZOJ_4530_[Bjoi2014]大融合_LCT Description 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个 ...

  8. P4219 [BJOI2014]大融合(LCT)

    P4219 [BJOI2014]大融合 对于每个询问$(u,v)$所求的是 ($u$的虚边子树大小+1)*($v$的虚边子树大小+1) 于是我们再开个$si[i]$数组表示$i$的虚边子树大小,维护一 ...

  9. 洛谷 P4219 [BJOI2014]大融合 解题报告

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

随机推荐

  1. 【java】打印流的基本实现及java.io.PrintStream、java.io.PrintWriter示例

    package 打印流; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impor ...

  2. mongodb 复制集

    mongodb 复制集 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...

  3. 网口做trunk

    首先发现这个服务器的两个网口对应的交换机端口 ailixin-asw2960>en ailixin-asw2960#terminal monitor 查看端口的状态 ailixin-asw296 ...

  4. Wincc flexable的数据记录的组态

    1.数据记录就是将PLC采集的数据记录下来如下,注意只有TP270和OP270以上的HMI设备才有数据记录 2.练习展示 3.开始创建数据记录 4.组态数据记录 5.组态变量的记录属性.将数据记录和变 ...

  5. MongoDB学习第七篇 --- sql和mongodb对比

    一.术语和概念的对比 SQL MongoDB database database     row document or BSON document column field index index ...

  6. Cleaner, more elegant, and harder to recognize (msdn blog)

    It appears that some people interpreted the title of one of my rants from many months ago, "Cle ...

  7. Linux发行版 CentOS6.5 禁用防火墙步骤

    本文地址http://comexchan.cnblogs.com/,尊重知识产权,转载请注明出处,谢谢! 注意:此操作需要使用root权限执行 首先查询防火墙状态: service iptables ...

  8. vue监听scroll使用报错的解决办法

    错误说明:在切换路由以后,依旧在其他页面触发了scroll有关的函数, 错误原因:在spa项目中,window对象是不变的,所以每次使用后需要销毁. 解决办法:vue的生命周期destroyed中销毁 ...

  9. Python 项目实践三(Web应用程序)第三篇

    接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...

  10. 【转】java jvm 线程 与操作系统线程

    原文链接:http://segmentfault.com/q/1010000000370403 Java的目标是要跨平台,而不同的操作系统(如类Unix和Windows)其任务调度机制有很大的不同,故 ...