用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)的更多相关文章

  1. LCT模板

    之前一直用的LCT模板,因为其实个人对LCT和Splay不是很熟,所以用起来总觉得略略的坑爹,过了一段时间就忘了,但事实上很多裸的LCT要改的东西是不多的,所以今天写了些注释,以后可能套起模板来会得心 ...

  2. LCT 模板及套路总结

    这一个月貌似已经考了无数次\(LCT\)了..... 保险起见还是来一发总结吧..... A. LCT 模板 \(LCT\) 是由大名鼎鼎的 \(Tarjan\) 老爷发明的. 主要是用来维护树上路径 ...

  3. [洛谷P1501] [国家集训队]Tree II(LCT模板)

    传送门 这是一道LCT的板子题,说白了就是在LCT上支持线段树2的操作. 所以我只是来存一个板子,并不会讲什么(再说我也不会,只能误人子弟2333). 不过代码里的注释可以参考一下. Code #in ...

  4. LuoguP3690 【模板】Link Cut Tree (动态树) LCT模板

    P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两 ...

  5. BZOJ2002 & LCT模板(分块不会搞)

    题意: 看题. 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿 着一条直线摆上n个装置,每个装置设定初 ...

  6. bzoj2049-洞穴勘测(动态树lct模板题)

    Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...

  7. Luogu 3690 LCT - 模板

    推荐几篇比较好的博客: FlashHu 的 讲解比较好 : 传送门 Candy 的 代码~ : 传送门 以及神犇Angel_Kitty的 学习笔记: 传送门 Code V 模板 #include< ...

  8. 【BZOJ2049,2631,3282,1180】LCT模板四连A

    好吧我并不想讲LCT 只是贴4个代码~ [BZOJ2049][Sdoi2008]Cave 洞穴勘测 #include <cstdio> #include <cstring> # ...

  9. BZOJ 1180 / 2843 LCT模板题_双倍经验

    一大早上到机房想先拍一下模板,热热身. 结果....对照着染色敲的 LCT 竟然死活也调不过去(你说我抄都能抄错) 干脆自己重新敲了一遍,10min就敲完了....... 还是要相信自己 Code: ...

随机推荐

  1. Beta冲刺Day2

    项目进展 李明皇 今天解决的进度 优化了信息详情页的布局:日期显示,添加举报按钮等 优化了程序的数据传递逻辑 明天安排 程序运行逻辑的完善 林翔 今天解决的进度 实现微信端消息发布的插入数据库 明天安 ...

  2. Jmeter读取文件中的值《一》

    此篇主要是对应上一章节的呼应,上一篇中讲到将返回值写入文件,这个值如果在下一个接口中用到, 那么我们需要去从文件中读取数据,这是我们该如何操作? 一.测试计划中添加CSV Data Set Confi ...

  3. vue初尝试--新建项目

    这是一篇技术贴--如何新建一个基于vue的项目 1.下载对应版本的nodejs安装,下载的nodejs都集成了npm,所以nodejs安装完成之后npm也对应安装完成了. 安装完成之后可以在cmd命令 ...

  4. CDH:5.14.0 中 Hive BUG记录

    CDH5.14.0使用的HIVE版本: 自建表log: +----------------------------------------------------+--+ | createtab_st ...

  5. HTTP头HOST

    http request header 中的host行的作用 在早期的Http 1.0版中,Http 的request请求头中是不带host行的,在Http 1.0的加强版和Http 1.1中加入了h ...

  6. OAuth2.0学习(1-2)OAuth2.0的一个企业级应用场景 - 新浪开放平台微博OAuth2.0认证

    http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5 开发者可以先浏览OAuth2.0的接口文档,熟悉OAuth2.0的接口及参数的含义,然后我们根据应用场景各自 ...

  7. yum 安装Apache

    1.查看是否安装Apache,命令:  rpm    -qa    httpd 2.yum install httpd ,yum安装Apache 3.chkconfig    httpd  on  s ...

  8. 三十天学不会TCP,UDP/IP网络编程 -- RTT的计算

    欢迎去gitbook(https://www.gitbook.com/@rogerzhu/)看到完整版. 如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,虽然说现在这种“看不见”的 ...

  9. jenkins配置findbugs失败---不要随便忽略警告!一个因为文件所有权引发的血案

    一:背景交代 这两天组长让我这边搭一个持续集成环境.梳理了需求后,因为我们的项目都是maven项目,所以我选择了jenkins+外置maven(区别于直接从jenkins里面安装)的方案.(cento ...

  10. centos单机安装zookeeper+kafaka

    环境如下: CentOS-7-x86_64zookeeper-3.4.11kafka_2.12-1.1.0 一.zookeeper下载与安装1)下载zookeeper [root@localhost ...