【LCT】大融合(luogu 4219)
正题
luogu 4219
题目大意
给你一棵树(初始都无连边),让你进行以下操作:
1.连接两个点
2.查询一条边被多少条路径经过
解题思路
因为有边的修改,可以用LCT来维护这棵树
一条边的经过次数,就相当于连接的两棵子树的大小之积
那么维护子树大小即可
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100010
using namespace std;
int n, q, x, y;
char c;
struct LCT
{#define ls son[x][0]#define rs son[x][1]int p[N], siz[N], size[N], fa[N], son[N][2];bool NR(int x){return fa[x] && (son[fa[x]][0] == x || son[fa[x]][1] == x);}bool IRS(int x){return son[fa[x]][1] == x;}void push_up(int x){size[x] = size[ls] + size[rs] + siz[x];return;}void pushr(int x){p[x] ^= 1;swap(ls, rs);return;}void push_down(int x){if (p[x]){p[x] = 0;if (ls) pushr(ls);if (rs) pushr(rs);}return;}void rotate(int x){int y = fa[x], z = fa[y], k = IRS(x), g = son[x][!k];if (NR(y)) son[z][IRS(y)] = x;if (g) fa[g] = y;fa[y] = x;fa[x] = z;son[x][!k] = y;son[y][k] = g;push_up(y);return;}void push_hall(int x){if (NR(x)) push_hall(fa[x]);push_down(x);return;}void Splay(int x){push_hall(x);while(NR(x)){if (NR(fa[x])){if (IRS(x) == IRS(fa[x])) rotate(fa[x]);else rotate(x);}rotate(x);}push_up(x);return;}void access(int x){for (int y = 0; x; x = fa[y = x]){Splay(x);siz[x] += size[rs] - size[y];rs = y;push_up(x);}return;}void make_root(int x){access(x);Splay(x);pushr(x);return;}void Split(int x, int y){make_root(x);access(y);Splay(y);return;}void link(int x, int y){make_root(x);make_root(y);fa[x] = y;siz[y] += size[x];push_up(y);return;}
}T;
int main()
{scanf("%d%d", &n, &q);for (int i = 1; i <= n; ++i)T.size[i] = T.siz[i] = 1;while(q--){scanf("%s%d%d", &c, &x, &y);if (c == 'A') T.link(x, y);else{T.Split(x, y);printf("%lld\n", 1ll * T.siz[x] * T.siz[y]);}}return 0;
}
【LCT】大融合(luogu 4219)相关推荐
- [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 ...
- [lct] Luogu P4219 大融合
题目描述 小强要在NN个孤立的星球上建立起一套通信系统.这套通信系统就是连接NN个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够 联通的树上路过它的简单路径 ...
最新文章
- java 小波去噪原理_小波去噪的基本知识
- centos 7安装_VMware Workstation安装centos
- Starling框架帮助手册中文版(PDF下载)
- 论文浅尝 | KGQR: 用于交互式推荐的知识图谱增强Q-learning框架
- linux arm桌面程序,Electron 从零创建一个 Windows/OS X/Linux 的桌面可执行程序
- Delphi 日期函数列表
- 转 Java工程师成神之路
- 腾讯实习生招聘之总体感悟
- 国庆必看9大区块链电影!建议收藏!
- mysql_dc.ncf_my live PC / ThinkCentre M920x Tiny / ThinkStation P330 Tiny
- clang diagnostic
- 第十五篇,man手册
- Python时间戳转为北京时间
- python-计算机视觉-OpenCV-调色板
- Python习题十三套汇总
- keil 调用 nop警告 174-Dexpression has no effect
- 射频芯片工作的心脏——晶振
- Linux C 获取系统时间秒/毫秒/微秒/纳秒
- linux 扫描局域网内所有主机
- 张嘉佳《云边有个小卖部》| 希望和悲伤,都是一缕光
热门文章
- 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法
- 查漏补缺方为上策!!两万六字总结vue的基本使用和高级特性,周边插件vuex和vue-router任你挑选
- [Redis6]常用数据类型_Zset有序集合
- Enlarge GCD CodeForces - 1034A(欧拉筛+最大公约数)
- Redis高可用基石--主从同步
- 里加一列为1_9月1号新宠物食品法规实施啦,辣鸡宠物食品遭殃,你也可能违法...
- Spring bean 初始化顺序
- 深入理解 JVM Class文件格式(五)
- 常系数齐次线性递推学习笔记
- CF653F. Paper task