【BZOJ2631】tree (LCT)
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2631
终于学了LCT惹qwq (看的板是黄学长的orzzz
T了很久发现窝开了个ch[MaxN][0] ,这都能编译过?
1 #include <cstdio> 2 #include <cstdlib> 3 #include <iostream> 4 #include <algorithm> 5 #define mod 51061 6 #define MaxN 100010 7 using namespace std; 8 int n, q; 9 int ch[MaxN][2]; 10 unsigned int sum[MaxN], sz[MaxN], ad[MaxN], mu[MaxN], Q[MaxN], p[MaxN], flip[MaxN], val[MaxN]; 11 12 void updata(int x, int m, int a){ 13 val[x] = (val[x]*m + a) % mod; 14 sum[x] = (sum[x]*m + a*sz[x]) % mod; 15 ad[x] = (ad[x] * m + a) % mod; 16 mu[x] = (mu[x] * m) % mod; 17 } 18 19 void push_up(int x){ 20 int l = ch[x][0], r = ch[x][1]; 21 sz[x] = (sz[l]+sz[r]+1) % mod; 22 sum[x] = (sum[l]+sum[r]+val[x]) % mod; 23 } 24 25 void push_down(int x){ 26 int l = ch[x][0], r = ch[x][1]; 27 if (flip[x]) { 28 flip[x] = 0; flip[l] ^= 1; flip[r] ^= 1; 29 swap(ch[x][0], ch[x][1]); 30 } 31 int m = mu[x], a = ad[x]; 32 if (m != 1 || a != 0) { 33 updata(l, m, a); 34 updata(r, m, a); 35 mu[x] = 1, ad[x] = 0; 36 } 37 } 38 39 bool isroot(int x){ 40 return ch[p[x]][0] != x && ch[p[x]][1] != x; 41 } 42 43 void rotate(int x){ 44 int y = p[x], z = p[y]; 45 if (!isroot(y)) ch[z][ch[z][1] == y] = x; 46 int l = ch[y][1] == x, r = l ^ 1; 47 p[y] = x; 48 p[x] = z; 49 p[ch[x][r]] = y; 50 51 ch[y][l] = ch[x][r]; 52 ch[x][r] = y; 53 push_up(y); 54 push_up(x); 55 } 56 57 void splay(int x){ 58 int top = 1; 59 Q[top] = x; 60 for (int t = x; !isroot(t); t = p[t]) Q[++top] = p[t]; 61 while (top) push_down(Q[top--]); 62 while (!isroot(x)){ 63 int y = p[x], z = p[y]; 64 if (!isroot(y)){ 65 if ((ch[y][1] == x) ^ (ch[z][1] == y)) rotate(x); 66 else rotate(y); 67 } 68 rotate(x); 69 } 70 } 71 72 void Access(int x){ 73 for (int t = 0; x; t = x, x = p[x]){ 74 splay(x); ch[x][1] = t; push_up(x); 75 } 76 } 77 78 void Make_root(int x){ 79 Access(x); splay(x); flip[x] ^= 1; 80 } 81 82 void Link(int u, int v){ 83 Make_root(u); p[u] = v; 84 } 85 86 void Cut(int u, int v){ 87 Make_root(u); Access(v); splay(v); 88 p[u] = ch[v][0] = 0; 89 } 90 91 void Split(int u, int v){ 92 Make_root(v); Access(u); splay(u); 93 } 94 95 void Read_Data(){ 96 scanf("%d%d", &n, &q); 97 for (int i = 1; i <= n; i++) 98 sum[i] = sz[i] = mu[i] = val[i] = 1; 99 for (int i = 1, u, v; i < n; i++){ 100 scanf("%d%d", &u, &v); 101 Link(u, v); 102 } 103 } 104 105 void Solve(){ 106 char s[5]; 107 int u, v, c, u2, v2; 108 for (int i = 1; i <= q; i++){ 109 scanf("%s%d%d", s, &u, &v); 110 if (s[0] == '+') { 111 scanf("%d", &c); 112 Split(u, v); updata(u, 1, c); 113 } 114 if (s[0] == '-') { 115 scanf("%d%d", &u2, &v2); 116 Cut(u, v); Link(u2, v2); 117 } 118 if (s[0] == '*') { 119 scanf("%d", &c); 120 Split(u, v); updata(u, c, 0); 121 } 122 if (s[0] == '/') { 123 Split(u, v); 124 printf("%d\n", sum[u]); 125 } 126 } 127 } 128 129 int main(){ 130 freopen("bzoj2631.in", "r", stdin); 131 freopen("bzoj2631.out", "w", stdout); 132 Read_Data(); 133 Solve(); 134 return 0; 135 }
_(:з」∠)_
转载于:https://www.cnblogs.com/Lukaluka/p/5139984.html
【BZOJ2631】tree (LCT)相关推荐
- 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题...
在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...
- 【BZOJ3028】食物(生成函数)
[BZOJ3028]食物(生成函数) 题面 一个人要带\(n\)个物品,共有\(8\)种物品,每种的限制分别如下: 偶数个;0/1个;0/1/2个;奇数个; 4的倍数个;0/1/2/3个;0/1个;3 ...
- 【CF949D】Curfew(贪心)
[CF949D]Curfew(贪心) 题面 CF 洛谷 破池姐姐翻译好强啊 题解 今天菊开讲这题,我大力猜想一波说肯定从中间有个分界线,他还说可能是假的 大力贪心就好了,从两边往中间考虑,只要这个房间 ...
- 【数据处理】奇异值分解(SVD) 数据降噪的python实现
[数据处理]奇异值分解(SVD) 数据降噪的python实现 一.特征值分解 二.奇异值分解 三.python实现 参考资料 一.特征值分解 (参考资料[1])对称矩阵不同的特征值对应的特征向量两两正 ...
- 【Luogu3478】【POI2008】STA-Station(动态规划)
[Luogu3478][POI2008]STA-Station(动态规划) 题面 题目描述 给出一个\(N(2<=N<=10^6)\)个点的树,找出一个点来,以这个点为根的树时,所有点的深 ...
- 【Centos】EFAK(kafka-eagle)对ZK、Kafka可视化管理工具容器化安装与配置
[Centos]EFAK(kafka-eagle)对ZK.Kafka可视化管理工具容器化安装与配置 前言 构建 Dockerfile system-config.properties works re ...
- 【31】GPU(下):为什么深度学习需要使用GPU?
[计算机组成原理]学习笔记--总目录 [31]GPU(下):为什么深度学习需要使用GPU? 引言 一.Shader 的诞生和可编程图形处理器[GPU发展历史] 1.可编程管线(Programable ...
- 【操作系统】文件管理(三)—— 文件的目录结构
[操作系统]文件管理(三)-- 文件的目录结构 一.文件控制块(FCB) 二.索引结点(FCB的改进) 三.目录结构 1. 单级目录结构 2. 两级目录结构 3. 多级目录结构(树形目录结构) 4. ...
- 【30】GPU(上):为什么玩游戏需要使用GPU?
[计算机组成原理]学习笔记--总目录 [30]GPU(上):为什么玩游戏需要使用GPU? 引言 一.GPU 的历史进程[略读] 二.图形渲染的流程[5个步骤] 1.顶点处理[三维空间中的点转换到二维空 ...
最新文章
- java与scala的区别 个位数以内的 就喜欢作者这么言简意赅的
- centos linux 系统上 log4j打印的时间与CST时间差8小时的解决方法
- Spring Countries在Apusic上部署
- 【译】Federated Learning: Bringing Machine Learning to the edge with Kotlin and Android
- 如何在面试时保持冷静_如何保持冷静并成为安全工程师
- c 语言是一种以解释方式实现的高级语言,高级语言按照计算机执行方式不同可以分为哪两类?它们的执行方式有什么不同,请进行概要说明。...
- 高等数学(第七版)同济大学 习题3-8 个人解答
- 2022-2027年中国金融科技行业市场调研及未来发展趋势预测报告
- 影像自动解译_遥感图像解译
- 熵增与热力学第二定律
- Queue接口分析:add和offer区别,remove和poll方法到底啥区别
- 就在昨天,我也关闭了朋友圈
- hi3516v300gpio驱动编译遇到的问题
- uniapp使用诺诺人脸认证(微信小程序)sdk
- 【商城报错】-商品上架功能报错
- 一个hin秀的小学三年级奥数题 [hin秀]
- python实部和虚部都是浮点数_python实部和虚部都是浮点数_python——Numpy库
- java年轻代频繁gc_JVM young GC频繁,内存泄漏
- python entry如何清空_如何清除tkinter中来自Entry小部件的以前输入?
- mybatis query 对象 or 查询
热门文章
- webalizer日志分析软件的安装
- fieldset在ie8下的margin\padding bug规避
- TCP三次握手及四次挥手详细图解
- a,b互换,不使用中间变量
- 听webcast的行为型模式篇-迭代器模式(Iterator Pattern) 记录
- 老鼠之Atlas之旅(一):Atlas官方站点
- Mysql (一)Mysql 数据库增删改查
- mysql ERROR 1042 (HY000): Can't get hostname for your address
- asm管理的dg数据文件缺失的处理方法
- JavaScript强化教程 -- cocosjs场景切换