[lct] Luogu P4219 大融合
题目描述
小强要在NN个孤立的星球上建立起一套通信系统。这套通信系统就是连接NN个点的一个树。 这个树的边是一条一条添加上去的。在某个时刻,一条边的负载就是它所在的当前能够 联通的树上路过它的简单路径的数量。
例如,在上图中,现在一共有了55条边。其中,(3,8)(3,8)这条边的负载是66,因 为有六条简单路径2-3-82−3−8,2-3-8-72−3−8−7,3-8,3-8-73−8,3−8−7,4-3-84−3−8,4-3-8-74−3−8−7路过了(3,8)(3,8)。
现在,你的任务就是随着边的添加,动态的回答小强对于某些边的负载的 询问。
输入输出格式
输入格式:
第一行包含两个整数 N, QN,Q,表示星球的数量和操作的数量。星球从 11 开始编号。
接下来的 QQ 行,每行是如下两种格式之一:
A x y
表示在 xx和 yy 之间连一条边。保证之前 xx 和 yy是不联通的。Q x y
表示询问 (x,y)(x,y) 这条边上的负载。保证 xx 和 yy 之间有一条边。
输出格式:
对每个查询操作,输出被查询的边的负载。
输入输出样例
8 6 A 2 3 A 3 4 A 3 8 A 8 7 A 6 5 Q 3 8
6
说明
对于所有数据,1≤N,Q≤10^51≤N,Q≤105
题解
- 对于lct一般都是维护链上的操作,那么怎么维护子树上的信息呢
- 定义siz[x]表示x的所有虚儿子的子树大小和,size[x]表示x的所有虚儿子+实儿子+自己的子树大小和
- 那么只要在虚实边变化的时候维护一下siz的大小,同时维护size就好了
- 求x的子树大小,只要access(x),然后siz[x]+1就是答案了
代码
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #define N 300010 5 using namespace std; 6 int n,m,f[N],ch[N][2],v[N],s[N],size[N],tag[N]; 7 int nroot(int x) { return ch[f[x]][0]==x||ch[f[x]][1]==x; } 8 void pushup(int x) { size[x]=size[ch[x][0]]+size[ch[x][1]]+s[x]+1; } 9 void pushdown(int x) { if (tag[x]) swap(ch[x][0],ch[x][1]),tag[ch[x][0]]^=1,tag[ch[x][1]]^=1,tag[x]=0; } 10 void work(int x) { if (nroot(x)) work(f[x]); pushdown(x); } 11 void rotate(int x) 12 { 13 int y=f[x],z=f[y],k=ch[y][1]==x,w=ch[x][!k]; 14 if (nroot(y)) ch[z][ch[z][1]==y]=x; 15 ch[x][!k]=y,ch[y][k]=w,f[y]=x,f[x]=z; 16 if (w) f[w]=y; 17 pushup(y); 18 } 19 void splay(int x) { work(x); while (nroot(x)) rotate(x); pushup(x); } 20 void access(int x) { for (int y=0;x;x=f[y=x]) splay(x),s[x]+=size[ch[x][1]],s[x]-=size[ch[x][1]=y],pushup(x); } 21 void makeroot(int x) { access(x),splay(x),tag[x]^=1; } 22 void split(int x,int y) { makeroot(x),access(y),splay(y); } 23 void link(int x,int y) { split(x,y);s[f[x]=y]+=size[x],pushup(y); } 24 int main() 25 { 26 scanf("%d%d",&n,&m); 27 for (int i=1;i<=n;i++) size[i]=i; 28 for (int x,y;m;m--) 29 { 30 char ch=getchar(); while (ch!='A'&&ch!='Q') ch=getchar(); 31 scanf("%d%d",&x,&y); 32 if (ch=='Q') split(x,y),printf("%lld\n",(s[x]+1)*(s[y]+1)); else link(x,y); 33 } 34 }
转载于:https://www.cnblogs.com/Comfortable/p/11129335.html
[lct] Luogu P4219 大融合相关推荐
- 洛谷P4219 大融合(LCT、虚子树)
解析 本题需要用LCT维护子树大小 然后我就不会了 然后我就用树剖水过去了 又快又好写,真香 现在详细聊聊如何用LCT维护子树信息 每个结点再定义一个新的变量记录所有虚儿子的信息 然后-完了? 告别盲 ...
- [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
[BZOJ4530][Bjoi2014]大融合 试题描述 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是 ...
- [Bjoi2014]大融合
[Bjoi2014]大融合 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 394 Solved: 244 [Submit][Status][Dis ...
- LOJ#2230. 「BJOI2014」大融合
LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...
- Vue笔记大融合总结
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...
- 极客日报:阿里再度调整组织架构:天猫淘宝大融合,新设三大中心;苹果M1首席芯片设计师跳槽至英特尔
一分钟速览新闻点! 腾讯接入数字人民币,微信支持数字人民币支付 阿里再度调整组织架构:天猫淘宝大融合,新设三大中心 七成清华毕业生进入体制内就业 北京最受欢迎:华为腾讯等科技企业也受青睐 钉钉近期将推 ...
- 重塑大融合体系,立体推进“业财合一”
3月16日,主题为"智能会计 价值财务"的2023企业数智化财务创新峰会在北京召开.用友网络高级专家张伟发表了题为"聚势向新:智能会计助力企业高质量发展"的演讲 ...
- 全域旅游发展的“首都经验” , 全域旅游的十大融合
一.北京发展全域旅游的历史渊源和现实基础 北京是全域旅游思想形成和理论创新的重要发源地之一,2008年延庆的千家店镇就提出"镇景合一",2011年延庆在全国率先提出建设" ...
- 【Neuralink与大脑的神奇未来】Part 6:大融合
目录 Part 1: The Human Colossus 人类的巨像 Part 2: The Brain 大脑 Part 3: Brain-Machine Interfaces 脑机接口 Part ...
最新文章
- centos6.5 设置tomcat8自启动
- 大话文本分类之Fnet
- 北理工校友发明文言文“填词大师”,断句、造词都能做,高考文言文满分靠它了...
- matlab循环矩阵
- 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- 控制角色在真实的环境中寻路...
- 计算属性|| 计算属性与方法的区别:计算属性是基于它们的依赖进行缓存的 ;方法不存在缓存||侦听器
- ORACLE查询闪回
- lrange是取出所有值并移除么_美欧日站点亚马逊物流库存绩效指标分数达标值将降低为 450...
- linux扩大 boot分区大小,Ubuntu扩大boot空间
- php numeric乘法,PHP is_numeric()用法及代码示例
- SPI通信原理---STM32F4--HAL
- 1115. Counting Nodes in a BST (30) 数据结构
- gcc2.95.3安装过程
- 【最详细】Tcpdump使用实验
- azcopy将本地目录上传到blob远端仓库中
- JavaScript错误信息
- cc1plus.exe: error: unrecognized command line option -fno-keep-inline-dllexport
- oracle数据库直方图,数据库 – Oracle伪造直方图
- Lint 静态代码检查工具
- 压缩文件密码暴力破解——cRARk使用方法
热门文章
- ECCV18 | 无监督难分样本挖掘改进目标检测
- 基于OpenCV与Dlib的行人计数开源实现
- 最新《机器学习最优化》课程笔记,38页pdf,Optimization for Machine Learning
- GitHub上已超过2900星!这份有原理、有代码、有Demo的算法资源火了
- 数据结构期末复习之排序
- java界面布局都有什么_java入門教程-10.5Java圖形界面之布局設計
- 避免缓冲区溢出的方法
- GDC2017访谈: 这3个工具让VR开发者事半功倍
- Web前端基础---JavaScript函数事件及其绑定DOM模型BOM模型
- Node.js-Express框架