【LCT】Tree II(luogu 1501)

Tree II

luogu 1501

题目大意

给出一棵树,让你进行若干操作,操作如下:
1.把两个点路径上的所有点权值加k
2.把两个点路径上的所有点权值乘k
3.把一条边断开,连上另一条边
4.查询两个点路径上的权值和

输入样例

3 2
1 2
2 3
* 1 3 4
/ 1 1

输出样例

4

数据范围

1⩽n,q⩽105,1⩽c⩽1041\leqslant n, q\leqslant 10^5, 1\leqslant c \leqslant 10^41n,q105,1c104

解题思路

LCT模板
多了两个计算的值
在下传lazym的时候把lazya乘上lazym即可(lazya为加值的lazy,lazym为乘值的lazy)

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100010
#define wyc 51061
using namespace std;
ll n, q, x, y, z, s[N], v[N], p[N], sz[N], la[N], lm[N], fa[N], son[N][2];
char c;
bool NR(ll x)
{return son[fa[x]][0] == x || son[fa[x]][1] == x;
}
bool IRS(ll x)
{return son[fa[x]][1] == x;
}
void pushr(ll x)
{swap(son[x][0], son[x][1]);p[x] ^= 1;return;
}
void pushm(ll x, ll y)//下传乘
{lm[x] = lm[x] * y % wyc;la[x] = la[x] * y % wyc;//把a的乘上,这样就不会有问题了s[x] = s[x] * y % wyc;v[x] = v[x] * y % wyc;return;
}
void pusha(ll x, ll y)
{la[x] = (la[x] + y) % wyc;s[x] = (s[x] + y * sz[x] % wyc) % wyc;v[x] = (v[x] + y) % wyc;return;
}
void push_down(ll x)
{if (lm[x] != 1) pushm(son[x][0], lm[x]), pushm(son[x][1], lm[x]), lm[x] = 1;if (la[x]) pusha(son[x][0], la[x]), pusha(son[x][1], la[x]), la[x] = 0;if (p[x]){if (son[x][0]) pushr(son[x][0]);if (son[x][1]) pushr(son[x][1]);p[x] = 0;}return;
}
void push_up(ll x)
{s[x] = (s[son[x][0]] + s[son[x][1]] + v[x]) % wyc;sz[x] = sz[son[x][0]] + sz[son[x][1]] + 1;return;
}
void rotate(ll x)
{ll 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;son[x][!k] = y;son[y][k] = g;fa[x] = z;fa[y] = x;push_up(y);return;
}
void push_hall(ll x)
{if (NR(x)) push_hall(fa[x]);push_down(x);return;
}
void Splay(ll x)
{push_hall(x);while(NR(x)){if (NR(fa[x]))rotate(IRS(x) == IRS(y) ? fa[x] : x);rotate(x);}push_up(x);return;
}
void access(ll x)
{for (ll y = 0; x; y = x, x = fa[x])Splay(x), son[x][1] = y, push_up(x);return;
}
void make_root(ll x)
{access(x);Splay(x);pushr(x);return;
}
ll find_root(ll x)
{access(x);Splay(x);while(son[x][0]) push_down(x), x = son[x][0];Splay(x);return x;
}
void Split(ll x, ll y)
{make_root(x);access(y);Splay(y);return;
}
void link(ll x, ll y)
{make_root(x);if (find_root(y) != x) fa[x] = y;return;
}
void cut(ll x, ll y)
{make_root(x);if (find_root(y) == x && fa[y] == x && !son[y][0]){fa[y] = son[x][1] = 0;push_up(x);}return;
}
int main()
{scanf("%lld%lld", &n, &q);for (ll i = 1; i <= n; ++i)sz[i] = lm[i] = v[i] = 1;for (ll i = 1; i < n; ++i){scanf("%lld%lld", &x, &y);link(x, y);}while(q--){cin>>c;if (c == '+'){scanf("%lld%lld%lld", &x, &y, &z);Split(x, y);pusha(y, z);}else if (c == '-'){scanf("%lld%lld", &x, &y);cut(x, y);scanf("%lld%lld", &x, &y);link(x, y);}else if (c == '*'){scanf("%lld%lld%lld", &x, &y, &z);Split(x, y);pushm(y, z);}else if (c == '/'){scanf("%lld%lld", &x, &y);Split(x, y);printf("%lld\n", s[y]);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图论复习汇总

三元环计数&四元环计数 Blog dfs树,点双,边双,强连通分量 Blog bfs树 对一个图运行 bfs 算法&#xff0c;每个点uuu的父亲定义为第一次遍历uuu时的前驱结点&#xff0c;若无则为根。 非树边只存在在同一层的两个点和相邻层的点中。 hihoCoder1147 时空阵 题意&#x…

P4718-[模板]Pollard-Rho算法

正题 题目链接:https://www.luogu.com.cn/problem/P4718 题目大意 给出一个数nnn&#xff0c;如果它是质数则输出PrimePrimePrime&#xff0c;否则输出它的最大质因子。 解题思路 Pollard-Rho\text{Pollard-Rho}Pollard-Rho算法的前置知识是Miller-Rabin\text{Miller-Rabin}M…

T-Dongle-S3开发笔记——创建工程

创建Hello world工程 打开命令面板 方法1&#xff1a;查看->命令面板 方法2&#xff1a;按F1 选择ESP-IDF:展示示例项目 创建helloworld 选择串口 选择芯片 至此可以编译下载运行了 运行后打印的信息显示flash只有2M。但是板子上电flash是W25Q32 4MB的吗 16M-bit

hdu 1576 A/B

文章目录题目&#xff1a;题解&#xff1a;代码&#xff1a;hdu 1576题目&#xff1a; 要求(A/B)%9973&#xff0c;但由于A很大&#xff0c;我们只给出n(nA%9973)(我们给定的A必能被B整除&#xff0c;且gcd(B,9973) 1)。 Input 数据的第一行是一个T&#xff0c;表示有T组数据。…

ASP.NET Core 中断请求了解一下(翻译)

本文所讲方式仅适用于托管在Kestrel Server中的应用。如果托管在IIS和IIS Express上时&#xff0c;ASP.NET Core Module(ANCM)并不会告诉ASP.NET Core在客户端断开连接时中止请求。但可喜的是&#xff0c;ANCM预计在.NET Core 2.2中会完善这一机制。1. 引言假设有一个耗时的Act…

子数整数(luogu 1151)

子数整数 luogu 1151 题目大意 给出一个数k&#xff0c;让你在10000~30000中求出满足前三位&#xff0c;中间三位&#xff0c;后三位都可被k整除的数 输入样例 15输出样例 22555 25555 28555 30000数据范围 0<k<1000 解题思路 暴力枚举 代码 #include<cstd…

2021-10-22

扫描线&#xff1a; https://www.cnblogs.com/Parsnip/p/10887135.html https://blog.csdn.net/Emma2oo6/article/details/120584307 https://blog.csdn.net/weixin_30609331/article/details/96234492 LIS& LCS https://www.xuebuyuan.com/586419.html https://blog.csdn…

.net core实践系列之短信服务-架构优化

前言通过前面的几篇文章&#xff0c;讲解了一个短信服务的架构设计与实现。然而初始方案并非100%完美的&#xff0c;我们仍可以对该架构做一些优化与调整。同时我也希望通过这篇文章与大家分享一下&#xff0c;我的架构设计理念。源码地址&#xff1a;https://github.com/SkyCh…

Poj 1061 青蛙的约会

Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 143491 Accepted: 33018 Description 文章目录题目&#xff1a;思路:代码:题目传送题目&#xff1a; 两只青蛙在网上相识了&#xff0c;它们聊得很开心&#xff0c;于是觉得很有必要见一面。它们很高兴地发现它们住…

P3649-[APIO2014]回文串【PAM】

正题 题目链接:https://www.luogu.com.cn/problem/P3649 题目大意 一个字符串&#xff0c;求最大的回文串长度出现次数 解题思路 构建出PAM\text{PAM}PAM然后统计一下每个节点作为后缀的次数&#xff0c;failfailfail树上上传一下信息就好了&#xff0c;时间复杂度O(n)O(n)O…

【数学】拉格朗日插值(luogu 4781/金牌导航 拉格朗日插值-1)

拉格朗日插值 luogu 4781 金牌导航 拉格朗日插值-1 题目大意 给出n个点&#xff0c;让你确定经过这n个点且不超过n-1次的方程&#xff0c;现在给出k&#xff0c;让你求出其函数值 样例#1 输入样例#1 3 100 1 4 2 9 3 16输出样例#1 10201样例#2 输入样例#2 3 100 1 1 …

游戏 (博弈论)

https://blog.csdn.net/Mys_C_K/article/details/91443390

.NET Core中Object Pool的简单使用

前言复用&#xff0c;是一个重要的话题&#xff0c;也是我们日常开发中经常遇到的&#xff0c;不可避免的问题。举个最为简单&#xff0c;大家最为熟悉的例子&#xff0c;数据库连接池&#xff0c;就是复用数据库连接。那么复用的意义在那里呢&#xff1f;简单来说就是减少不必…

数论 欧几里得与扩展欧几里得

欧几里得算法&#xff1a; 求a&#xff0c;b的最大公约数 gcd&#xff08;a,b&#xff09; gcd(b,a%b) ll gcd(ll a,ll b) {return b0?a:gcd(b,a%b); }扩展欧几里得算法&#xff1a; 如果a&#xff0c;b是整数&#xff0c;一定存在x和y使得axbygcd&#xff08;a&#xff0c…

P4173-残缺的字符串【FFT】

正题 题目链接:https://www.luogu.com.cn/problem/P4173 题目大意 给出两个字符串S,TS,TS,T&#xff0c;其中包含小写字母和一些???&#xff0c;???可以匹配任何字符。 求有多少个ppp使得T0∼∣t∣−1Sp∼p∣t∣−1T_{0\sim |t|-1}S_{p\sim p|t|-1}T0∼∣t∣−1​Sp∼…

转圈游戏(luogu 1965)

转圈游戏 luogu 1965 题目大意 求(xm10k)%n(x m\times 10^k)\%n(xm10k)%n 输入样例 10 3 45输出样例 5数据范围 1<n<10000000<m<n,1⩽x⩽n,0<k<1091<n<10000000<m<n,1\leqslant x\leqslant n,0<k<10^91<n<10000000<m<n…

.Net Core应用框架Util介绍(三)

上篇.Net Core应用框架Util介绍&#xff08;二&#xff09;介绍了Util的开发环境&#xff0c;并让你把Demo运行起来。本文将介绍该Demo的前端Angular运行机制以及目录结构。目录结构在VS上打开Util Demo&#xff0c;会看见如下的目录结构。现代前端通常采用VS Code开发&#xf…

【DP】字串距离(luogu 1279)

字串距离 luogu 1279 题目大意 给出两个字符串&#xff0c;让你加上若干空格&#xff0c;使其长度相同 对于第i位&#xff0c;如果都是字母那代价就是ASCII码的差值&#xff0c;如果一个是字母那就是k&#xff0c;如果没有一个是字母那就是0&#xff0c;让你求最小代价 输入…

hdu 1525 Euclid‘s Game

hdu 1525 文章目录Problem Description题意&#xff1a;题解&#xff1a;代码&#xff1a;Problem Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser of the two n…

P4351-[CERC2015]Frightful Formula【组合数学,MTT】

正题 题目链接:https://www.luogu.com.cn/problem/P4351 题目大意 n∗nn*nn∗n的矩形&#xff0c;给出第一行和第一列的数&#xff0c;剩下的满足Fi,ja∗Fi,j−1b∗Fi−1,jcF_{i,j}a*F_{i,j-1}b*F_{i-1,j}cFi,j​a∗Fi,j−1​b∗Fi−1,j​c 求Fn,nF_{n,n}Fn,n​ 解题思路 第…