题目描述

小强要在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 之间有一条边。

输出格式:

对每个查询操作,输出被查询的边的负载。

输入输出样例

输入样例#1:

8 6
A 2 3
A 3 4
A 3 8
A 8 7
A 6 5
Q 3 8

输出样例#1:

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 大融合相关推荐

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

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

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

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

  3. [Bjoi2014]大融合

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

  4. LOJ#2230. 「BJOI2014」大融合

    LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...

  5. Vue笔记大融合总结

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

  6. 极客日报:阿里再度调整组织架构:天猫淘宝大融合,新设三大中心;苹果M1首席芯片设计师跳槽至英特尔

    一分钟速览新闻点! 腾讯接入数字人民币,微信支持数字人民币支付 阿里再度调整组织架构:天猫淘宝大融合,新设三大中心 七成清华毕业生进入体制内就业 北京最受欢迎:华为腾讯等科技企业也受青睐 钉钉近期将推 ...

  7. 重塑大融合体系,立体推进“业财合一”

    3月16日,主题为"智能会计 价值财务"的2023企业数智化财务创新峰会在北京召开.用友网络高级专家张伟发表了题为"聚势向新:智能会计助力企业高质量发展"的演讲 ...

  8. 全域旅游发展的“首都经验” , 全域旅游的十大融合

    一.北京发展全域旅游的历史渊源和现实基础 北京是全域旅游思想形成和理论创新的重要发源地之一,2008年延庆的千家店镇就提出"镇景合一",2011年延庆在全国率先提出建设" ...

  9. 【Neuralink与大脑的神奇未来】Part 6:大融合

    目录 Part 1: The Human Colossus 人类的巨像 Part 2: The Brain 大脑 Part 3: Brain-Machine Interfaces 脑机接口 Part ...

最新文章

  1. centos6.5 设置tomcat8自启动
  2. 大话文本分类之Fnet
  3. 北理工校友发明文言文“填词大师”,断句、造词都能做,高考文言文满分靠它了...
  4. matlab循环矩阵
  5. 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- 控制角色在真实的环境中寻路...
  6. 计算属性|| 计算属性与方法的区别:计算属性是基于它们的依赖进行缓存的 ;方法不存在缓存||侦听器
  7. ORACLE查询闪回
  8. lrange是取出所有值并移除么_美欧日站点亚马逊物流库存绩效指标分数达标值将降低为 450...
  9. linux扩大 boot分区大小,Ubuntu扩大boot空间
  10. php numeric乘法,PHP is_numeric()用法及代码示例
  11. SPI通信原理---STM32F4--HAL
  12. 1115. Counting Nodes in a BST (30) 数据结构
  13. gcc2.95.3安装过程
  14. 【最详细】Tcpdump使用实验
  15. azcopy将本地目录上传到blob远端仓库中
  16. JavaScript错误信息
  17. cc1plus.exe: error: unrecognized command line option -fno-keep-inline-dllexport
  18. oracle数据库直方图,数据库 – Oracle伪造直方图
  19. Lint 静态代码检查工具
  20. 压缩文件密码暴力破解——cRARk使用方法

热门文章

  1. ECCV18 | 无监督难分样本挖掘改进目标检测
  2. 基于OpenCV与Dlib的行人计数开源实现
  3. 最新《机器学习最优化》课程笔记,38页pdf,Optimization for Machine Learning
  4. GitHub上已超过2900星!这份有原理、有代码、有Demo的算法资源火了
  5. 数据结构期末复习之排序
  6. java界面布局都有什么_java入門教程-10.5Java圖形界面之布局設計
  7. 避免缓冲区溢出的方法
  8. GDC2017访谈: 这3个工具让VR开发者事半功倍
  9. Web前端基础---JavaScript函数事件及其绑定DOM模型BOM模型
  10. Node.js-Express框架