链接: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)相关推荐

  1. 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题...

    在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...

  2. 【BZOJ3028】食物(生成函数)

    [BZOJ3028]食物(生成函数) 题面 一个人要带\(n\)个物品,共有\(8\)种物品,每种的限制分别如下: 偶数个;0/1个;0/1/2个;奇数个; 4的倍数个;0/1/2/3个;0/1个;3 ...

  3. 【CF949D】Curfew(贪心)

    [CF949D]Curfew(贪心) 题面 CF 洛谷 破池姐姐翻译好强啊 题解 今天菊开讲这题,我大力猜想一波说肯定从中间有个分界线,他还说可能是假的 大力贪心就好了,从两边往中间考虑,只要这个房间 ...

  4. 【数据处理】奇异值分解(SVD) 数据降噪的python实现

    [数据处理]奇异值分解(SVD) 数据降噪的python实现 一.特征值分解 二.奇异值分解 三.python实现 参考资料 一.特征值分解 (参考资料[1])对称矩阵不同的特征值对应的特征向量两两正 ...

  5. 【Luogu3478】【POI2008】STA-Station(动态规划)

    [Luogu3478][POI2008]STA-Station(动态规划) 题面 题目描述 给出一个\(N(2<=N<=10^6)\)个点的树,找出一个点来,以这个点为根的树时,所有点的深 ...

  6. 【Centos】EFAK(kafka-eagle)对ZK、Kafka可视化管理工具容器化安装与配置

    [Centos]EFAK(kafka-eagle)对ZK.Kafka可视化管理工具容器化安装与配置 前言 构建 Dockerfile system-config.properties works re ...

  7. 【31】GPU(下):为什么深度学习需要使用GPU?

    [计算机组成原理]学习笔记--总目录 [31]GPU(下):为什么深度学习需要使用GPU? 引言 一.Shader 的诞生和可编程图形处理器[GPU发展历史] 1.可编程管线(Programable ...

  8. 【操作系统】文件管理(三)—— 文件的目录结构

    [操作系统]文件管理(三)-- 文件的目录结构 一.文件控制块(FCB) 二.索引结点(FCB的改进) 三.目录结构 1. 单级目录结构 2. 两级目录结构 3. 多级目录结构(树形目录结构) 4. ...

  9. 【30】GPU(上):为什么玩游戏需要使用GPU?

    [计算机组成原理]学习笔记--总目录 [30]GPU(上):为什么玩游戏需要使用GPU? 引言 一.GPU 的历史进程[略读] 二.图形渲染的流程[5个步骤] 1.顶点处理[三维空间中的点转换到二维空 ...

最新文章

  1. java与scala的区别 个位数以内的 就喜欢作者这么言简意赅的
  2. centos linux 系统上 log4j打印的时间与CST时间差8小时的解决方法
  3. Spring Countries在Apusic上部署
  4. 【译】Federated Learning: Bringing Machine Learning to the edge with Kotlin and Android
  5. 如何在面试时保持冷静_如何保持冷静并成为安全工程师
  6. c 语言是一种以解释方式实现的高级语言,高级语言按照计算机执行方式不同可以分为哪两类?它们的执行方式有什么不同,请进行概要说明。...
  7. 高等数学(第七版)同济大学 习题3-8 个人解答
  8. 2022-2027年中国金融科技行业市场调研及未来发展趋势预测报告
  9. 影像自动解译_遥感图像解译
  10. 熵增与热力学第二定律
  11. Queue接口分析:add和offer区别,remove和poll方法到底啥区别
  12. 就在昨天,我也关闭了朋友圈
  13. hi3516v300gpio驱动编译遇到的问题
  14. uniapp使用诺诺人脸认证(微信小程序)sdk
  15. 【商城报错】-商品上架功能报错
  16. 一个hin秀的小学三年级奥数题 [hin秀]
  17. python实部和虚部都是浮点数_python实部和虚部都是浮点数_python——Numpy库
  18. java年轻代频繁gc_JVM young GC频繁,内存泄漏
  19. python entry如何清空_如何清除tkinter中来自Entry小部件的以前输入?
  20. mybatis query 对象 or 查询

热门文章

  1. webalizer日志分析软件的安装
  2. fieldset在ie8下的margin\padding bug规避
  3. TCP三次握手及四次挥手详细图解
  4. a,b互换,不使用中间变量
  5. 听webcast的行为型模式篇-迭代器模式(Iterator Pattern) 记录
  6. 老鼠之Atlas之旅(一):Atlas官方站点
  7. Mysql (一)Mysql 数据库增删改查
  8. mysql ERROR 1042 (HY000): Can't get hostname for your address
  9. asm管理的dg数据文件缺失的处理方法
  10. JavaScript强化教程 -- cocosjs场景切换