【模板整合】LCT模板

原题树的统计Count

LCT动态维护树信息.比链剖好写但是速度真的没太有优势…

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
#define MAXN 50010
#define MAXINT 0x7fffffff
using namespace std;
struct splay
{
    int fa,ch[2];
    LL sum,maxn,w;
    bool rev;
}tree[MAXN];
int q[MAXN],top;
char ch[10];
void print();
long long U,V,n,m,u[MAXN],v[MAXN];
inline void in(long long &x)
{
    int flag=1;char ch=getchar();x=0;
    while (!(ch>=‘0‘&&ch<=‘9‘)) flag=ch==‘-‘?-1:1,ch=getchar();
    while (ch>=‘0‘&&ch<=‘9‘)    x=x*10+ch-‘0‘,ch=getchar();x*=flag;
}
inline bool is_root(int x)
{
    return tree[tree[x].fa].ch[0]!=x&&tree[tree[x].fa].ch[1]!=x;
}
inline void push_up(int x)
{
    tree[x].sum=tree[tree[x].ch[0]].sum+tree[tree[x].ch[1]].sum+tree[x].w;
    tree[x].maxn=max(tree[x].w,max(tree[tree[x].ch[0]].maxn,tree[tree[x].ch[1]].maxn));
}
inline void push_down(int x)
{
    if (tree[x].rev)
    {
        tree[x].rev^=1;tree[tree[x].ch[0]].rev^=1;tree[tree[x].ch[1]].rev^=1;
        swap(tree[x].ch[0],tree[x].ch[1]);
    }
}
inline void rot(int x)
{
    int y=tree[x].fa,z=tree[y].fa,l,r;
    l=(tree[y].ch[1]==x);r=l^1;
    if (!is_root(y))    tree[z].ch[(tree[z].ch[1]==y)]=x;
    tree[tree[x].ch[r]].fa=y;tree[y].fa=x;tree[x].fa=z;
    tree[y].ch[l]=tree[x].ch[r];tree[x].ch[r]=y;
    push_up(y);push_up(x);
}
inline void Splay(int x)
{
    q[++top]=x;
    for (int i=x;!is_root(i);i=tree[i].fa)  q[++top]=tree[i].fa;
    while (top) push_down(q[top--]);
    while (!is_root(x))
    {
        int y=tree[x].fa,z=tree[y].fa;
        if (!is_root(y))
        {
            if (tree[y].ch[0]==x^tree[z].ch[0]==y)  rot(x);
            else    rot(y);
        }
        rot(x);
    }
}
inline void access(int x)
{
    for (int t=0;x;t=x,x=tree[x].fa)    Splay(x),tree[x].ch[1]=t,push_up(x);
}
inline void make_root(int x)
{
    access(x);Splay(x);tree[x].rev^=1;
}
inline void link(int x,int y)
{
    make_root(x);tree[x].fa=y;
}
inline void cut(int x,int y)
{
    make_root(x);access(y);Splay(y);
}
int main()
{
    in(n);tree[0].maxn=-MAXINT;
    for (int i=1;i<n;i++)   in(u[i]),in(v[i]);
    for (int i=1;i<=n;i++)  in(tree[i].w),tree[i].sum=tree[i].maxn=tree[i].w;
    for (int i=1;i<n;i++)   link(u[i],v[i]);
    in(m);
    while (m--)
    {
        scanf("%s",ch);in(U);in(V);
        if (ch[1]==‘H‘) Splay(U),tree[U].w=V,push_up(U);
        if (ch[1]==‘M‘) cut(U,V),printf("%lld\n",tree[V].maxn);
        if (ch[1]==‘S‘) cut(U,V),printf("%lld\n",tree[V].sum);
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 08:43:05

【模板整合】LCT模板的相关文章

2014鞍山网络预选赛1006(LCT模板题)hdu5002

Tree Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 41    Accepted Submission(s): 10 Problem Description You are given a tree with N nodes which are numbered by integers 1..N. Each node is as

Yii框架学习笔记(二)将html前端模板整合到框架中

选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/topics/390807796 更多内容 百度:yii 前端 http://my.oschina.net/u/1472492/blog/221085 摘要 Yii框架学习笔记(二)将html前端模板整合到框架中 原文地址:http://www.ldsun.com/1309.html 上一节成功将Y

ThinkPHP3.2.3整合smarty模板(二)

前言:继ThinkPHP3.2.3整合smarty模板(一)之后,继续来探讨一下tp框架整合smarty模板,看到有人在群上问到怎么使用自定义的常量,今天就具体来谈谈: 一.开发一个项目,必不可少会用到很多的自定义常量,比如定义一些常量作为引入静态文件,但在smarty模板中怎么直接使用这些常量呢? 1.定义常量:如:define('__IMAGE__', __STATIC__ . '/img'),在入口文件定义或者其他文件定义这个都无所谓,若在其他文件定义,则需要引入一下; 2.在模板中使用常

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

P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和.保证x到y是联通的. 1:后接两个整数(x,y),代表连接x到y,若x到y已经联通则无需连接. 2:后接两个整数(x,y),代表删除边(x,y),不保证边(x,y)存在. 3:后接两个整数(x,y),代表将点x上的权值变成y. 输入输出

思维导图,流程图模板整合

思维导图与流程图在工作中都是经常使用的,出现频率较高的,有些不会绘制的或者是刚接触这一类的图表形式的都会选择使用模板来完成工作,但是很多朋友却不知道模板在×××,今天要给大家分享的是几款孩子走精美的思维导图,流程图模板整合,需要使用的朋友可以自取进行使用. **模板所在地:迅捷画图 流程图: 1.电商运营流程图 这是一份关于电商运营的流程图,详细的介绍了新用户.老用户未付款状态下的解决方法. 2.<电商物流仓储流程图> 这是一份关于电商物流仓储流程图,详细的概述了电商物流仓储的流程,提高了工作

【模板整合计划】一些好玩的函数

[模板整合计划]一些好玩的函数 之前闲得无聊用 \(C++\) 写了几个小游戏,在这期间学了一些 \(windows.h\) 里的函数... (以下函数若无特殊说明均需要使用函数库 <\(windows.h\)> 或者万能头 <\(bits\)/\(stdc\)++\(.h\)>) [ clock ( ) , CLOCKS _ PER _ SEC ] 头文件: <\(ctime\)> 功能: \(clock()\) 是计算从 \("\) 开启这个程序 \(&q

springboot整合Thymeleaf模板引擎

引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>nekohtml</groupId&g

Cacti 模板(图形模板、数据模板、主机模板)与自定义监控脚本

Cacti定义了三种类型的模板,分别是 主机模板 数据模板 图形模板     主机模板(Host templates),它是图像模板和数据查询的一个集合,描述了监控某一类型的机器需要生成那些图像. 数据模板(Data templates),它描述了 Cacti 存储哪些数据到指定类型的 RRD 文件.该模板与 RRDTool 工具的 create 命令相关. 图形模板(Graph templates),描述了生成的一张图像应该是什么样子的.包括使用哪些数据模板.展示哪些元素.是否使用 CDEF

函数模板与类模板

函数模板,顾名思义,是在生成函数时依照的模板. 有时,我们需要对不同的数据类型做同样的函数操作. 比如:分别对一个int类型数 和 一个double类型数求平方. 这时,虽然都是同样的求平方操作(函数体内代码一样),但是我们必须要编写两个不同的函数,因为处理int类型的函数的参数和返回值类型都应该是int,而处理double类型的函数的参数和返回值都应该是double. 如下:函数体内操作代码一样,设计为重载函数,用相同的函数名,但是参数类型和返回值类型却都不一样,函数需要定义两次. int S

[自制模板引擎] 为模板引擎增加解析表达式功能

通过上一片已经能把占位符替换成对应的变量的值,实现了一个简单的迷你模板引擎,模板引擎一个不错的功能就是能够计算一些简单的表达式,计算表达式的核心其实就是执行字符串,执行字符串的方法多种多样eval,Function,setTimeout等等,都能执行,至于用哪种方法,就仁者见仁智者见智了. 下面整理一下在模板引擎中会遇到的表达式: { a + b } //普通的计算表达式 { a == false } //普通的比较 { a === false } //全等比较 { a !== false} {