BZOJ - 1036 树的统计Count(线段树树链剖分裸题)

麒麟V10 ARM环境离线部署MySQL:从依赖缺失到服务自启的完整避坑指南 本文详细介绍了在麒麟V10 ARM环境下离线部署MySQL的完整流程,包括依赖缺失解决方案、目录配置、服务自启设置及性能调优。特别针对国产操作系统和ARM架构的兼容性问题,提供了实用的避坑指南和优化建议,帮助用户高效完成MySQL部署与维护。 阅读详情

1036: [ZJOI2008]树的统计Count

Time Limit: 10 Sec   Memory Limit: 162 MB
Submit: 19039   Solved: 7761
[ Submit][ Status][ Discuss]

Description

  一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成
一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 I
II. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身

Input

  输入的第一行为一个整数n,表示节点的个数。接下来n – 1行,每行2个整数a和b,表示节点a和节点b之间有
一条边相连。接下来n行,每行一个整数,第i行的整数wi表示节点i的权值。接下来1行,为一个整数q,表示操作
的总数。接下来q行,每行一个操作,以“CHANGE u t”或者“QMAX u v”或者“QSUM u v”的形式给出。 
对于100%的数据,保证1<=n<=30000,0<=q<=200000;中途操作中保证每个节点的权值w在-30000到30000之间。

Output

  对于每个“QMAX”或者“QSUM”的操作,每行输出一个整数表示要求输出的结果。

Sample Input

4
1 2
2 3
4 1
4 2 1 3
12
QMAX 3 4
QMAX 3 3
QMAX 3 2
QMAX 2 3
QSUM 3 4
QSUM 2 1
CHANGE 1 5
QMAX 3 4
CHANGE 3 6
QMAX 3 4
QMAX 2 4
QSUM 3 4

Sample Output

4
1
2
2
10
6
5
6
5
16

树链剖分裸题

#include <bits/stdc++.h>
using namespace std;

const int N = 3e4 +10;
int n, m, tot, tot1;
int num[N], tree[N], pre[N], head[N], son[N], fa[N], data[N], top[N], deep[N];
struct xx{
    int l, r, sum, maxi;
} T[N<<2];
struct xxx{
    int to, nex;
} a[N<<1];

void Add(int u, int v){
    a[++tot].to = v, a[tot].nex = head[u], head[u] = tot;
}

void dfs1(int k, int f, int d){
    deep[k] = d, fa[k] = f, num[k] = 1;
    for(int i = head[k]; i != -1; i = a[i].nex){
        int to = a[i].to;
        if(to == f) continue;
        dfs1(to, k, d+1);
        num[k] += num[to];
        if(!son[k] || num[to] > num[son[k]]) son[k] = to;
    }
}

void dfs2(int k, int Number){
    top[k] = Number, tree[k] = ++tot1;
    pre[tree[k]] = k;
    if(!son[k]) return;
    dfs2(son[k], Number);
    for(int i = head[k]; i != -1; i = a[i].nex){
        int to = a[i].to;
        if(to != son[k] && to != fa[k]) dfs2(to, to);
    }
}

void Build(int l, int r, int k){
    T[k].l = l, T[k].r = r;
    if(l == r){
        T[k].sum = T[k].maxi = data[pre[l]];
        return;
    }
    int mid = (l+r)>>1;
    Build(l, mid, k<<1);
    Build(mid+1, r, k<<1|1);
    T[k].maxi = max(T[k<<1].maxi, T[k<<1|1].maxi);
    T[k].sum = T[k<<1].sum+T[k<<1|1].sum;
}

void Update(int x, int v, int k){
    if(T[k].l == T[k].r && T[k].l == x){
        T[k].sum = T[k].maxi = v;
        return;
    }
    int mid = (T[k].l+T[k].r)>>1;
    if(x <= mid) Update(x, v, k<<1);
    else Update(x, v, k<<1|1);
    T[k].maxi = max(T[k<<1].maxi, T[k<<1|1].maxi);
    T[k].sum = T[k<<1].sum+T[k<<1|1].sum;
}

int Max;
void Query_max(int l, int r, int k){
    if(l <= T[k].l && r >= T[k].r){
        Max = max(Max, T[k].maxi);
        return;
    }
    if(T[k].l == T[k].r) return;
    int mid = (T[k].l+T[k].r)>>1;
    if(r <= mid) Query_max(l, r, k<<1);
    else if(l > mid) Query_max(l, r, k<<1|1);
    else{
        Query_max(l, mid, k<<1);
        Query_max(mid+1, r, k<<1|1);
    }
}

int Sum;
void Query_sum(int l, int r, int k){
    if(l <= T[k].l && r >= T[k].r){
        Sum += T[k].sum;
        return;
    }
    if(T[k].l == T[k].r) return;
    int mid = (T[k].l+T[k].r)>>1;
    if(r <= mid) Query_sum(l, r, k<<1);
    else if(l > mid) Query_sum(l, r, k<<1|1);
    else{
        Query_sum(l, mid, k<<1);
        Query_sum(mid+1, r, k<<1|1);
    }
}

int Get_max(int x, int y){
    int f1 = top[x], f2 = top[y];
    Max = -0x3f3f3f3f;
    while(f1 != f2){
        if(deep[f1] < deep[f2]){
            swap(f1, f2);
            swap(x, y);
        }
        Query_max(tree[f1], tree[x], 1);
        x = fa[f1], f1 = top[x];
    }
    deep[x] > deep[y] ? Query_max(tree[y], tree[x], 1) : Query_max(tree[x], tree[y], 1);
    return Max;
}

int Get_sum(int x, int y){
    int f1 = top[x], f2 = top[y];
    Sum = 0;
    while(f1 != f2){
        if(deep[f1] < deep[f2]){
            swap(f1, f2);
            swap(x, y);
        }
        Query_sum(tree[f1], tree[x], 1);
        x = fa[f1], f1 = top[x];
    }
    deep[x] > deep[y] ? Query_sum(tree[y], tree[x], 1) : Query_sum(tree[x], tree[y], 1);
    return Sum;
}

int main(){
    while(scanf("%d", &n) == 1){
        tot = tot1 = 0;
        int u, v;
        memset(head, -1, sizeof head);
        for(int i = 1; i < n; i++){
            scanf("%d%d", &u, &v);
            Add(u, v); Add(v, u);
        }
        for(int i = 1; i <= n; i++){
            scanf("%d", &data[i]);
        }
        dfs1(1, 0, 1); dfs2(1, 1);
        Build(1, n, 1);
        scanf("%d", &m);
        char op[10];
        while(m--){
            scanf("%s%d%d", op, &u, &v);
            if(op[1] == 'H') Update(tree[u], v, 1);
            else if(op[1] == 'M') printf("%d\n", Get_max(u, v));
            else printf("%d\n", Get_sum(u, v));
        }
    }
}


Modbus测试工具ModbusPoll与Modbus Slave使用方法 小白实操记录 Modbus 下面介绍modbus标准协议从站、主站仿真工具;可用于指令下发,数据采集等;是学习、现场运维的好工具。 1 介绍 Modbus Poll :Modbus主机仿真器,用于测试和调试Modbus从设备。该软件支持ModbusRTU、ASCII、TCP/IP。用来帮助开发人员测试Modbus从设备,或者其它Modbus协议的测试和仿真。它支持多文档接口,即,可以同时监视多个从设备/数据域。每个窗口简单地设定从设备ID,功能,地址,大小和轮询间隔。你可以从任意一个窗口读写寄存器和线圈。如果你想改 阅读详情

相关推荐

用Python和sklearn预测NBA比赛胜负:从数据清洗到模型优化的完整流程

本文详细介绍了如何使用Python和sklearn构建NBA比赛胜负预测模型,涵盖从数据清洗、特征工程到模型优化与部署的完整流程。通过对比随机森林、XGBoost等主流算法,提供实战技巧和解决方案,帮助数据爱好者掌握体育数据分析的核心技术。

weixin_30823001的博客 131

bzoj 1036 //1036: [ZJOI2008]树的统计Count 树链剖分

bzoj 1036 //1036: [ZJOI2008]树的统计Count 树链剖分 bzoj 1036 //1036: [ZJOI2008]树的统计Count //在线测评地址https://www.lydsy.com/JudgeOnline/problem.php?id=1036 更多题解,详见https://blog.youkuaiyun.com/mrcrack/article/de...

mrcrack的博客 282

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 195

BZOJ1036 树的统计Count(树链剖分+线段树)

BZOJ1036 树的统计Count(树链剖分+线段树) 题目大意 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 I II. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路...

FLY_WHITE的博客 273

brother的PT-9800PCN标签打印机二次开发

本来想通过esc/p指令打印标签,但是无奈能找到的资料太少,而且打电话给客服,也没有sample可以提供参考,后来客服说使用template功能的话,打印很方便。于是下载手册学习了一下, 先下载P-touch Editor软件,制作标签模板。 制作的模板就是普通的标签,不需要连接数据库之类的,模板里有3个object,分别是文本1,文本2,条形码3。这个很关键,后面的代码传送数据,就是按这...

3563

从代码层面分析STM32 标准库和HAL库的差异

相当于每个设置都是独立的函数。HAL库将一段代码通过宏定义的方式封装成了一个函数,每个端口的时钟都单独的定义了一个名称,标准库是一个独立的函数,通过参数传递的方式来设置每个端口的时钟。这两个版本的函数本质上操作的还是寄存器,不过HAL库操作的只是BSRR寄存器,而标准库端口置1的时候操作的是BSRR寄存器,端口清0的时候操作的是BRR寄存器。标准库设置端口模式的时候,是在if语句中判断之后直接设置的,而HAL端口模式设置时,却使用了switch语句去设置,说明在HAL库中,端口模式和标准库中发生了改变。

HXYDJ的博客 2万+

树链剖分+线段树 bzoj1036 树的统计Count

传送门:点击打开链接 题意:节点更新,路径求最大值以及求和。 思路:树链剖分,要注意单点更新和边更新的区别。然后就是在建线段树的时候,应该是用重新编号的新编号去建立的,刚开始一直没注意这个地方,然后调bug也调不出来,后来看了好久才看出来,以后还真要注意一下。 #include #define fuck(x) cout<<"["<<x<<"]" #define FIN freopen("in

qwb的博客 845

从 JDK8 到 JDK17:CRMEB 框架升级

【摘要】CRMEB开源框架已成功从JDK8升级至JDK17,带来显著性能提升:并发吞吐量提高35%,响应延迟降低40%,资源占用减少25%。升级方案解决87个技术卡点,支持模块化扩展和微服务转型,兼容SpringBoot3.0等新技术。提供基础版到企业级的升级服务,包含代码重构指导和性能调优。经金融级验证的方案可帮助电商平台实现日均10万+UV承载,支付成功率提升至99.7%。现以低于市场30%的价格提供全周期技术支持,助力企业抢占技术先机。

weixin_39782540的博客 701

【BZOJ 1036】[ZJOI2008]树的统计Count

【BZOJ 1036】[ZJOI2008]树的统计Count 树链剖分模板题~

Regina8023 950

外设测试 - ATAES132A 加解密芯片测试

原理 使用芯片官方提供的读写操作库,进行先写后读并校验,确认数据一致。 示例代码 int main(void) { uint8_t ret; aes132p_enable_interface(); ret = write_memory_test(); if (ret != AES132_FUNCTION_RETCODE_SUCCESS) { aes132p_disable_interface(); printf

一个软件工程师的技术笔记 858

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1190

BZOJ 1036: [ZJOI2008]树的统计Count【树链剖分】

1036: [ZJOI2008]树的统计Count 【题目描述】 传送门 【题解】 裸的树链剖分。 代码如下 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 30...

aiweiluan5095的博客 157

STM32 USB键盘实现指南

在STM32上实现键盘功能可以通过USB HID(人机接口设备)协议来实现,使STM32设备能被计算机识别为标准键盘。通过上述步骤,您可以在STM32上实现一个功能完整的USB键盘。关键点包括:正确配置USB HID设备实现键盘矩阵扫描处理按键事件并生成HID报告优化按键响应和消抖处理添加额外功能如宏键和LED反馈这个实现可以作为基础,进一步扩展为游戏键盘、宏键盘或特殊输入设备。

suny8的专栏 968

BZOJ1036树的统计Count

1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MB Submit: 10566 Solved: 4261 [Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHAN

DCrusher's blog 758

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

BZOJ 1036 树的统计Count 树链剖分+线段树

https://www.lydsy.com/JudgeOnline/problem.php?id=1036   一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 I II. QSUM u v: 询问从点u到点v...

xiji333的博客 204

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

bzoj 1036 [ZJOI2008]树的统计Count 题解(树链剖分)

原题链接: 洛谷:点我QωQ bzoj:点我QωQ 题意简述 仍然很模板。。。 给一个树,要支持三种操作:路径求最大,路径求和,单点修改。 数据 输入 先是一个正整数nnn和接下来n−1n-1n−1行每行两个数u,vu,vu,v表示uuu到vvv有一个边。 然后一行nnn个正整数,第iii个表示点iii的初始权值。 然后有一个正整数qqq,表示操作个数。 接下来qqq行每行描述一个操作。 操作有三...

LightningUZ的博客 290

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

bzoj1036 [ZJOI2008]树的统计Count (树链剖分|Link Cut Tree)

Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身 Input

Shion的专栏 701

BZOJ - 1036 [ZJOI2008]树的统计Count 树链剖分入门

[ZJOI2008]树的统计Count escription   一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从...

diangan7073的博客 135

【bzoj1036】[ZJOI2008]树的统计Count 树链剖分+线段树

Description一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身Input输入的第一行为一个

DQS的树洞 817

BZOJ 1036 [ZJOI2008]树的统计Count (树链剖分)

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1036         BZOJ太可怕了,第一页按照AC数排序,除了A+B,第一个就是这题了。。。。看着题目懵逼了很久,不知道怎么做,搜了一发题解,才发现是树链剖分。然而树链剖分这个名词也只是停留在听说过的程度,于是跟着一个大神的博客看了一下午才看懂,然后照着博客打了一次,但是一直是WA。索性

xtttgo的博客 406

【BZOJ1036】【树链剖分】树的统计Count

Description 一 棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身 ...

Gregory99174的博客 172

BZoj 1036: [ZJOI2008]树的统计Count【树链剖分+线段树--模板题】

题目链接:1036 1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 13096  Solved: 5271 [Submit][Status][Discuss] Description   一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形

leibniz_zhang的博客 483

BZOJ 1036: [ZJOI2008]树的统计Count (树链剖分 + 线段树)

题目点我点我点我 解题思路:树链剖分简单题。 /* *********************************************** ┆ ┏┓   ┏┓ ┆ ┆┏┛┻━━━┛┻┓ ┆ ┆┃       ┃ ┆ ┆┃   ━   ┃ ┆ ┆┃ ┳┛ ┗┳ ┃ ┆ ┆┃       ┃ ┆ ┆┃   ┻   ┃ ┆ ┆┗━┓ 马 ┏━┛ ┆ ┆  ┃

blanKey的博客 373

【树链剖分/线段树】BZOJ1036-[ZJOI2008]树的统计Count

【题目大意】 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和。 *注意:从点u到点v的路径上的节点包括u和v本身 【思...

dianchunhui2654的博客 184

[BZOJ1036][ZJOI2008]树的统计Count

1036: [ZJOI2008]树的统计Count Time Limit:10 SecMemory Limit:162 MBSubmit:10191Solved:4131[Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I...

dianpu6028的博客 190

bzoj1036: [ZJOI2008]树的统计Count

1036: [ZJOI2008]树的统计Count Time Limit:10 SecMemory Limit:162 MBSubmit:9113Solved:3695[Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I....

anmob303090的博客 152
上一篇: POJ - 2155 Matrix(二维线段树、区间更新单点查询)
下一篇: C++ string 字符串查找匹配
信鸦
博客等级 码龄10年 10粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值