解:splay维护括号序列,就是进子树一次出子树一次。树上每个点直接记录这两个点的编号。

建树的时候按照分配的编号建树。

 #include <bits/stdc++.h>
typedef long long LL;
#define gc pa==pb&&(pb=(pa=buf)+fread(buf,1,100000,stdin),pa==pb)?EOF:*pa++
static char buf[],*pa(buf),*pb(buf);
template <class T> inline void read(T &x) {
x = ;
register char c(gc);
while((c<''||c>'')&&c!='-')
c=gc;
register int f(c=='-'?c=gc,-:);
while(c>=''&&c<='')
x=x*+c-,c=gc;
x*=f;
return;
} const int N = ;
const LL INF = 0x3f3f3f3f3f3f3f3fll; struct Edge {
int nex, v;
}edge[N]; int tp; int fa[N], op[N], ed[N], s[N][], root, stk[N], top;
LL large[N], val[N], Val[N], tag[N];
int e[N], num = , n, id[N]; inline void add(int x, int y) {
tp++;
edge[tp].v = y;
edge[tp].nex = e[x];
e[x] = tp;
return;
} void DFS(int x, int f) {
id[++num] = x;
op[x] = num;
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
if(y == f) continue;
DFS(y, x);
}
id[++num] = x;
ed[x] = num;
return;
} inline void pushup(int x) {
large[x] = std::max(large[s[x][]], large[s[x][]]);
large[x] = std::max(large[x], val[x]);
if(!fa[x]) root = x;
return;
} inline void pushdown(int x) {
if(tag[x]) {
if(s[x][]) {
tag[s[x][]] += tag[x];
val[s[x][]] += tag[x];
large[s[x][]] += tag[x];
}
if(s[x][]) {
tag[s[x][]] += tag[x];
val[s[x][]] += tag[x];
large[s[x][]] += tag[x];
}
tag[x] = ;
}
return;
} void out(int x = root) {
pushdown(x);
if(s[x][]) {
out(s[x][]);
}
printf("%d ", id[x]);
if(s[x][]) {
out(s[x][]);
}
return;
} inline void rotate(int x) {
int y = fa[x];
int z = fa[y];
bool f = (s[y][] == x); fa[x] = z;
if(z) {
s[z][s[z][] == y] = x;
}
s[y][f] = s[x][!f];
if(s[x][!f]) {
fa[s[x][!f]] = y;
}
s[x][!f] = y;
fa[y] = x; pushup(y);
return;
} inline void splay(int x, int g = ) {
int y = x;
stk[top = ] = y;
while(fa[y]) {
y = fa[y];
stk[++top] = y;
}
while(top) {
pushdown(stk[top]);
top--;
} y = fa[x];
int z = fa[y];
while(y != g) {
if(z != g) {
(s[z][] == y) ^ (s[y][] == x) ?
rotate(x) : rotate(y);
}
rotate(x);
y = fa[x];
z = fa[y];
}
pushup(x);
return;
} inline int getLP() {
pushdown(root);
int p = s[root][];
while(s[p][]) {
p = s[p][];
pushdown(p);
}
return p;
} inline int getRP() {
pushdown(root);
int p = s[root][];
while(s[p][]) {
p = s[p][];
pushdown(p);
}
return p;
} int build(int l, int r, int f) {
int mid = (l + r) >> ;
//int x = np(f, Val[id[mid]]);
fa[mid] = f;
val[mid] = large[mid] = Val[id[mid]];
if(l < mid) s[mid][] = build(l, mid - , mid);
if(mid < r) s[mid][] = build(mid + , r, mid);
pushup(mid);
return mid;
} inline void Add(int x, LL v) {
splay(op[x]);
int a = getLP();
splay(ed[x]);
int b = getRP();
splay(b);
splay(a, b);
int z = s[a][];
tag[z] += v;
large[z] += v;
val[z] += v;
pushup(a);
pushup(b);
return;
} int main() { int q, rt, x; LL y;
read(n); read(q); read(rt);
for(register int i = ; i <= n; i++) {
read(Val[i]);
}
for(register int i = ; i < n; i++) {
read(x); read(y);
add(x, y); add(y, x);
} DFS(rt, ); /*for(int i = 1; i <= num + 1; i++) {
printf("%d ", id[i]);
}
puts("");*/ Val[] = val[] = -INF;
root = build(, num + , ); //out(), puts(""); for(int i = , f; i <= q; i++) {
read(f); read(x);
if(f == ) { /// out max subtree x
splay(op[x]);
int a = getLP();
splay(ed[x]);
int b = getRP();
splay(b);
splay(a, b);
printf("%lld\n", large[s[a][]]);
}
else if(f == ) { /// subtree x += y
read(y);
Add(x, y);
}
else if(f == ) { /// change fa[x] -> y
read(y);
splay(op[x]);
int a = getLP();
splay(ed[x]);
int b = getRP(); /*printf("%d op = %d ed = %d \n", x, op[x], ed[x]);
printf("a=%d %d b=%d %d \n", a, id[a], b, id[b]);*/ splay(b);
splay(a, b);
int z = s[a][];
s[a][] = fa[z] = ;
pushup(a);
pushup(b);
splay(op[y]);
int t = getRP();
splay(t, op[y]);
s[t][] = z; fa[z] = t;
pushup(t);
pushup(op[y]);
}
//out(), puts("");
} return ;
}

AC代码

[模板]ETT的更多相关文章

  1. [BZOJ3786]星系探索(伪ETT)

    3786: 星系探索 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 1638  Solved: 506[Submit][Status][Discuss ...

  2. [长期更新]模板&算法学习情况

    这里仅作为自我检查用,模板代码请移步其他博文 标+的表示已学完,标?的表示需要进一步学习,标-的表示有计划但未开始学习,标*的表示暂时没有计划学习 数学 ?BSGS +FFT&NTT ?Luc ...

  3. Java 将Excel转为et和ett格式

    以.et结尾的文件格式是属于金山办公软件WPS Office中的电子表格文件,.ett是一种模板文件格式.除了通过WPS软件可以创建该格式的电子表格外,也可以通过格式转换的方法来获得,如将Micros ...

  4. Jade模板引擎让你飞

    写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...

  5. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  6. CMS模板应用调研问卷

    截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...

  7. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  8. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  9. OpenCV模板匹配算法详解

    1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...

随机推荐

  1. Laravel技巧:使用load、with预加载 区别

    1.使用load $posts = Post::all(); $posts->load('user'); 2.使用with $posts = Post::with('user')->all ...

  2. MySQL Connector/ODBC 2.50 (MyODBC 2.50)连接方式

    一.MySQL Connector/ODBC 2.50 (MyODBC 2.50)连接方式 1.本地数据库连接Driver={MySQL};Server=localhost;Option=16834; ...

  3. Junit概述

    Junit ->  java unit.也就是说Junit是xunit家族中的一员. unit   <- unit test case,即单元测试用例. Junit  = java uni ...

  4. Mysql如何快速插入100万条记录?

    1.java程序拼接insert带多个value,使一次提交多个值. 2.插入数据之前先删除索引(注意主键不能删除),然后插入数据,最后重建索引 3.可以设置手动commit,用来提高效率 4.使用批 ...

  5. EXAMPLE FOR PEEWEE 多姿势使用 PEEWEE

    使用 PEEWEE 断断续续的差不多已经三个年头了,但是没有像这次使用这么多的特性和功能,所以这次一并记录一下,需要注意的地方和一些使用细节,之后使用起来可能会更方便. 因为是使用的 SQLAched ...

  6. Yii2控制台程序最佳实践

    模板工程标准的控制台程序要素: (1)完整明确文字提示用户(并且使用红,绿,黄三种颜色标识提示文字:红色为错误相关,绿色为成功相关,黄色为进行中提示) (2)告知用户运行进度(完成任务的一部分即显示进 ...

  7. vue 條件語句

    條件判斷使用v-if.v-else-if.v-else. v-show

  8. linux Vi使用

    前言    在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式vi编辑器有3种模式:命令模式.输入模式.末行模式. ...

  9. 神烦之float

    另外一篇文章 : css float 一 历史 Float的设计初衷仅仅是:文字环绕效果(向word中的文字环绕效果) 二 特性 1.包裹性:块级元素如果不设置float,它默认会撑满整个屏幕,而如果 ...

  10. draknet网络配置参数

    https://blog.csdn.net/hrsstudy/article/details/65447947?utm_source=itdadao&utm_medium=referral [ ...