LCT模板(BZOJ2631)
用LCT实现路径加,路径乘,断开及加上一条边(保证是树),查询路径和。
#include <cstdio>
#include <algorithm>
#define l(x) t[x].s[0]
#define r(x) t[x].s[1]
#define f(x) t[x].f
#define lc(x) (r(f(x)) == x)
#define int unsigned int const int N = , p = ;
char op[];
int n,m,x,y,c,tp,q[N];
struct nd {int v,f,s[],sm,sz,mu,ad,rv;}t[N]; bool rt(int x) {return l(f(x)) != x && r(f(x)) != x;}
void cal(int x, int m, int a) {
if(!x) return;
t[x].v = (t[x].v*m+a)%p, t[x].sm = (t[x].sm*m+a*t[x].sz)%p, t[x].mu = t[x].mu*m%p, t[x].ad = (t[x].ad*m+a)%p;
} void pu(int x) {t[x].sm = (t[l(x)].sm+t[r(x)].sm+t[x].v)%p, t[x].sz = (t[l(x)].sz+t[r(x)].sz+)%p;}
void pd(int x) {
if(t[x].rv) t[x].rv = , t[l(x)].rv ^= , t[r(x)].rv ^= , std::swap(l(x),r(x));
if(t[x].mu != || t[x].ad) cal(l(x),t[x].mu,t[x].ad),cal(r(x),t[x].mu,t[x].ad);
t[x].mu = , t[x].ad = ;
}
void rot(int x) {
int y = f(x), z = f(y), xx = r(y)==x;
if(!rt(y)) t[z].s[r(z)==y] = x;
f(x) = z, f(y) = x, f(t[x].s[!xx]) = y;
t[y].s[xx] = t[x].s[!xx], t[x].s[!xx] = y;
pu(y);
}
void sp(int x) {
q[++tp] = x;
for(int i = x; !rt(i); i = f(i)) q[++tp] = f(i);
while(tp) pd(q[tp--]);
for(int y = f(x); !rt(x); rot(x),y=f(x)) if(!rt(y)) {
if(lc(x)^lc(y)) rot(x); else rot(y);
}
pu(x);
} void acs(int x) {for(int y = ; x; x = f(x)) sp(x), r(x) = y, pu(y=x);}
void mkrt(int x) {acs(x), sp(x), t[x].rv ^= ;}
void spli(int x, int y) {mkrt(y), acs(x), sp(x);}
void lk(int x, int y) {mkrt(x), f(x) = y;}
void cut(int x, int y) {mkrt(x), acs(y), sp(y), l(y) = f(x) = , pu(y);} signed main() {
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) t[i].v = t[i].sm = t[i].sz = t[i].mu = ;
for(int i = ; i < n; i++) scanf("%d%d", &x, &y), lk(x,y);
while(m--) {
scanf("%s%d%d", op, &x, &y);
if(op[] == '+') scanf("%d", &c), spli(x,y), cal(x,,c);
else if(op[] == '-') cut(x,y), scanf("%d%d", &x, &y), lk(x,y);
else if(op[] == '*') scanf("%d", &c), spli(x,y), cal(x,c,);
else spli(x,y), printf("%d\n", t[x].sm);
}
return ;
}
LCT模板(BZOJ2631)的更多相关文章
- LCT模板
之前一直用的LCT模板,因为其实个人对LCT和Splay不是很熟,所以用起来总觉得略略的坑爹,过了一段时间就忘了,但事实上很多裸的LCT要改的东西是不多的,所以今天写了些注释,以后可能套起模板来会得心 ...
- LCT 模板及套路总结
这一个月貌似已经考了无数次\(LCT\)了..... 保险起见还是来一发总结吧..... A. LCT 模板 \(LCT\) 是由大名鼎鼎的 \(Tarjan\) 老爷发明的. 主要是用来维护树上路径 ...
- [洛谷P1501] [国家集训队]Tree II(LCT模板)
传送门 这是一道LCT的板子题,说白了就是在LCT上支持线段树2的操作. 所以我只是来存一个板子,并不会讲什么(再说我也不会,只能误人子弟2333). 不过代码里的注释可以参考一下. Code #in ...
- LuoguP3690 【模板】Link Cut Tree (动态树) LCT模板
P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两 ...
- BZOJ2002 & LCT模板(分块不会搞)
题意: 看题. 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿 着一条直线摆上n个装置,每个装置设定初 ...
- bzoj2049-洞穴勘测(动态树lct模板题)
Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...
- Luogu 3690 LCT - 模板
推荐几篇比较好的博客: FlashHu 的 讲解比较好 : 传送门 Candy 的 代码~ : 传送门 以及神犇Angel_Kitty的 学习笔记: 传送门 Code V 模板 #include< ...
- 【BZOJ2049,2631,3282,1180】LCT模板四连A
好吧我并不想讲LCT 只是贴4个代码~ [BZOJ2049][Sdoi2008]Cave 洞穴勘测 #include <cstdio> #include <cstring> # ...
- BZOJ 1180 / 2843 LCT模板题_双倍经验
一大早上到机房想先拍一下模板,热热身. 结果....对照着染色敲的 LCT 竟然死活也调不过去(你说我抄都能抄错) 干脆自己重新敲了一遍,10min就敲完了....... 还是要相信自己 Code: ...
随机推荐
- python解释NTFS runlist的代码(文章转自北亚数据恢复张宇工程师)
代码如下: 执行效果如下:root@zhangyu-VirtualBox:~/NTFS-5# python3 read_runlist.py mft_source.img ***参数数量或格式错误! ...
- 数据故障的恢复-MSSQL ndf文件大小变为0 KB恢复过程
一.故障描述 成都某客户,存储损坏,数据库崩溃.重组存储,恢复数据库文件,发现有四个ndf文件大小变为0 KB.数据库大小约80TB.数据库中有1223个文件,数据库每10天生成一个NDF文件,每个N ...
- DES加密实现的思想及代码
感谢: http://blog.csdn.net/yxstars/article/details/38424021 上面的日志非常清晰的写出了这个DES加密的过程,主要存在初始IP置换,然后中间存在8 ...
- 释义Oracle 11r2中并行执行相关参数
因最近对现场某些服务器进行诊断和调整,用到了这类参数,因此对这类参数做了详尽的查阅和研究,现将该类参数释义如下,以方便同行和自己参考,禁止转载: 1.PARALLEL_ADAPTIVE_MULTI_U ...
- Hadoop安装-部署-测试
一:准备Linux环境[安装略] a.修改主机名 vim /etc/sysconfig/network NETWORKING= ...
- 新概念英语(1-125)Tea for two
Does Susan have tea by herself?A:Can't you come in and have tea now,Peter? Not yet.B:I must water th ...
- MFC基础
入门博客:http://www.cnblogs.com/qinfengxiaoyue/category/451679.html 消息机制:http://www.cnblogs.com/qinfengx ...
- POJ1236【Tarjan+缩点】
题目大意:有向关系体现在电脑可以通过网络单向的传输文件,并规定一旦有电脑存在该文件,那么所有它能传输的电脑就能在第一时间得到这个文件,题目有两个问题,第一个是最少向网络中的几台电脑投放文件,能使得整个 ...
- java Hibernate 处理 oracle xmltype类型
网上关于如何处理oracle xmltype类型的博客很多,我现在分享的是针对具体业务来的,我在oracle数据库entity表中detail插入了一条xmltype类型的数据 xml的详细内容如下: ...
- .net core 使用阿里云短信发送SMS
阿里云官方的skd(aliyun-net-sdk-core,aliyun-net-sdk-dysmsapi)在dnc中发送短信会出错,nuget上的包貌似也一样不管用.直接改下sdk当然也可以,但就发 ...