BZOJ:4530: [Bjoi2014]大融合
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]大融合的更多相关文章
- BZOJ.4530.[BJOI2014]大融合(LCT)
题目链接 BZOJ 洛谷 详见这 很明显题目是要求去掉一条边后两边子树sz[]的乘积. LCT维护的是链的信息,那么子树呢? 我们用s_i[x]来记录轻边连向x的子树的和(记作虚儿子),那么sum[x ...
- bzoj 4530 [Bjoi2014]大融合——LCT维护子树信息
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4530 LCT维护子树 siz .设 sm[ ] 表示轻儿子的 siz 和+1(1是自己的si ...
- 【刷题】BZOJ 4530 [Bjoi2014]大融合
Description 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够 联通的树上路过它 ...
- bzoj 4530: [Bjoi2014]大融合【LCT】
新姿势,一般来讲LCT只能维护splay重边里的数据,而这里要求维护整颗子树的size 多维护一个sq表示当前点轻儿子的size和,si表示包括轻重边的整颗子树的大小 然后需要改sq的地方是link和 ...
- 【BZOJ】4530: [Bjoi2014]大融合
[题意]给定n个点的树,从无到有加边,过程中动态询问当前图某条边两端连通点数的乘积,n<=10^5. [算法]线段树合并+并查集 (||LCT(LCT维护子树信息 LCT维护子树信息(+启发式合 ...
- [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
[BZOJ4530][Bjoi2014]大融合 试题描述 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是 ...
- BZOJ_4530_[Bjoi2014]大融合_LCT
BZOJ_4530_[Bjoi2014]大融合_LCT Description 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个 ...
- P4219 [BJOI2014]大融合(LCT)
P4219 [BJOI2014]大融合 对于每个询问$(u,v)$所求的是 ($u$的虚边子树大小+1)*($v$的虚边子树大小+1) 于是我们再开个$si[i]$数组表示$i$的虚边子树大小,维护一 ...
- 洛谷 P4219 [BJOI2014]大融合 解题报告
P4219 [BJOI2014]大融合 题目描述 小强要在\(N\)个孤立的星球上建立起一套通信系统.这套通信系统就是连接\(N\)个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的 ...
随机推荐
- 【java】打印流的基本实现及java.io.PrintStream、java.io.PrintWriter示例
package 打印流; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impor ...
- mongodb 复制集
mongodb 复制集 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...
- 网口做trunk
首先发现这个服务器的两个网口对应的交换机端口 ailixin-asw2960>en ailixin-asw2960#terminal monitor 查看端口的状态 ailixin-asw296 ...
- Wincc flexable的数据记录的组态
1.数据记录就是将PLC采集的数据记录下来如下,注意只有TP270和OP270以上的HMI设备才有数据记录 2.练习展示 3.开始创建数据记录 4.组态数据记录 5.组态变量的记录属性.将数据记录和变 ...
- MongoDB学习第七篇 --- sql和mongodb对比
一.术语和概念的对比 SQL MongoDB database database row document or BSON document column field index index ...
- 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 ...
- Linux发行版 CentOS6.5 禁用防火墙步骤
本文地址http://comexchan.cnblogs.com/,尊重知识产权,转载请注明出处,谢谢! 注意:此操作需要使用root权限执行 首先查询防火墙状态: service iptables ...
- vue监听scroll使用报错的解决办法
错误说明:在切换路由以后,依旧在其他页面触发了scroll有关的函数, 错误原因:在spa项目中,window对象是不变的,所以每次使用后需要销毁. 解决办法:vue的生命周期destroyed中销毁 ...
- Python 项目实践三(Web应用程序)第三篇
接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...
- 【转】java jvm 线程 与操作系统线程
原文链接:http://segmentfault.com/q/1010000000370403 Java的目标是要跨平台,而不同的操作系统(如类Unix和Windows)其任务调度机制有很大的不同,故 ...