5190 - 提高:DFS序和欧拉序:树上操作(区域修改1)

题目传送门


时间限制 : 2 秒

内存限制 : 256 MB

有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。

输入

第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,表示树中节点的初始权值。接下来 N-1 行每行三个正整数 fr, to , 表示该树中存在一条边 (fr, to) 。再接下来 M 行,每行分别表示一次操作。其中 第一个数表示该操作的种类( 1-3 ) ,之后接这个操作的参数( x 或者 x a ) 。

输出

对于每个询问操作,输出该询问的答案。答案之间用换行隔开。

样例
输入
5 5
1 2 3 4 5
1 2
1 4
2 3
2 5
3 3
1 2 1
3 5
2 1 2
3 3
输出
6
9
13
提示

对于 100% 的数据, N,M<=100000 ,且所有输入数据的绝对值都不会超过 10^6 。
 


C++代码:
 

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int n,m,clk;
int dfn[N],siz[N],fa[N],dep[N],son[N],top[N],rk[N];
ll a[N],tree[N<<2],lz[N<<2];
vector<int>g[N];
//计算深度、父亲、子树大小、重儿子
void dfs1(int u,int f)
{fa[u]=f;dep[u]=dep[f]+1;siz[u]=1;int maxson=-1;for(int v:g[u]){if(v==f) continue;dfs1(v,u);siz[u]+=siz[v];if(siz[v]>maxson) maxson=siz[v],son[u]=v;}
}
//建立dfs序和top重链顶点
void dfs2(int u,int t)
{top[u]=t;dfn[u]=++clk;rk[clk]=u;if(son[u]) dfs2(son[u],t);for(int v:g[u])if(v!=fa[u]&&v!=son[u]) dfs2(v,v);
}
void build(int p,int l,int r)
{if(l==r){tree[p]=a[rk[l]];return;}int mid=(l+r)>>1;build(p<<1,l,mid);build(p<<1|1,mid+1,r);tree[p]=tree[p<<1]+tree[p<<1|1];
}
void pushdown(int p,int l,int r)
{if(lz[p]){int mid=(l+r)>>1;tree[p<<1]+=(mid-l+1)*lz[p];tree[p<<1|1]+=(r-mid)*lz[p];lz[p<<1]+=lz[p];lz[p<<1|1]+=lz[p];lz[p]=0;}
}
void update(int p,int l,int r,int x,int y,ll v)
{if(x>r||y<l) return;if(x<=l&&r<=y){tree[p]+=(r-l+1)*v;lz[p]+=v;return;}pushdown(p,l,r);int mid=(l+r)>>1;update(p<<1,l,mid,x,y,v);update(p<<1|1,mid+1,r,x,y,v);tree[p]=tree[p<<1]+tree[p<<1|1];
}
ll query(int p,int l,int r,int x,int y)
{if(x>r||y<l) return 0;if(x<=l&&r<=y) return tree[p];pushdown(p,l,r);int mid=(l+r)>>1;return query(p<<1,l,mid,x,y)+query(p<<1|1,mid+1,r,x,y);
}
ll query_path(int x)
{ll res=0;while(x){res+=query(1,1,n,dfn[top[x]],dfn[x]);x=fa[top[x]];}return res;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%lld",&a[i]);for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);g[u].push_back(v);g[v].push_back(u);}dfs1(1,0);dfs2(1,1);build(1,1,n);while(m--){int op,x;ll v;scanf("%d%d",&op,&x);if(op==1){scanf("%lld",&v);update(1,1,n,dfn[x],dfn[x],v);}else if(op==2){scanf("%lld",&v);update(1,1,n,dfn[x],dfn[x]+siz[x]-1,v);}else printf("%lld\n",query_path(x));}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90820.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Oracle】数据泵

ORACLE数据库 数据泵 核心参数全解析 ORACLE expdp 命令使用详解 1.ATTACH[schema_name.]job_name Schema_name 用于指定方案名,job_name 用于指定导出作业名.注意,如果使用 ATTACH 选项,在命令行除了连接字符串和 ATTACH 选项外,不能指定任何其他选项,示例如下: expdp hr/hr A…

机器学习的算法有哪些?

&#x1f31f; 欢迎来到AI奇妙世界&#xff01; &#x1f31f; 亲爱的开发者朋友们&#xff0c;大家好&#xff01;&#x1f44b; 我是人工智能领域的探索者与分享者&#xff0c;很高兴在CSDN与你们相遇&#xff01;&#x1f389; 在这里&#xff0c;我将持续输出AI前沿技术、实…

【计算机网络】OSI七层模型

OSI七层模型为什么需要OSI七层模型&#xff1f;OSI七层模型具体是什么&#xff1f;Layer7&#xff1a;应用层&#xff08;Application Layer&#xff09;Layer6&#xff1a;表示层&#xff08;Presentation Layer&#xff09;Layer5&#xff1a;会话层&#xff08;Session Laye…

RS485转Profinet网关配置指南:高效启动JRT激光测距传感器测量模式

RS485转Profinet网关配置指南&#xff1a;高效启动JRT激光测距传感器测量模式RS485转Profinet网关&#xff1a;让JRT激光测距传感器高效开启测量模式在工业自动化场景中&#xff0c;设备间的高效通信是实现精准控制的关键。RS485转Profinet网关作为连接传统RS485设备与现代Prof…

「日拱一码」040 机器学习-不同模型可解释方法

目录 K最近邻(KNN) - 基于距离的模型 决策边界可视化 查看特定样本的最近邻 ​随机森林(RF) - 树模型 feature_importances_ SHAP值分析 可视化单棵树 多层感知器(MLP) - 神经网络 部分依赖图 LIME解释器 权重可视化 支持向量回归(SVR) - 核方法 支持向量可视化 部…

编程与数学 03-002 计算机网络 09_传输层功能

编程与数学 03-002 计算机网络 09_传输层功能一、传输层的作用&#xff08;一&#xff09;进程间通信&#xff08;二&#xff09;提供可靠传输&#xff08;三&#xff09;复用与分用二、TCP协议&#xff08;一&#xff09;TCP的连接建立与释放&#xff08;二&#xff09;TCP的可…

14. Web服务器-Nginx-工作原理

文章目录前言一、简介二、工作原理1. 多进程架构2. 事件驱动模型3. 模块化设计三、工作流程1. 启动阶段2. 等待连接3. 请求处理阶段4. 响应构造与输出5. 连接关闭前言 Nginx‌ Nginx&#xff08;发音为“Engine-X”&#xff09;是一款高性能的开源Web服务器软件&#xff0c;同…

AP-0316:集 USB 即插即用、智能降噪于一体的多功能 AI 声卡,重新定义清晰语音交互

AP-0316突发噪音和抗风噪测试还在为语音设备的噪音刺耳、连接复杂、功放适配麻烦而头疼&#xff1f;AP-0316 多功能 AI 降噪消回音 USB 声卡来了 —— 以 “USB 即插即用 自带功放 智能降噪 场景适配” 四大核心优势&#xff0c;将专业级语音处理技术变得简单易用&#xff0…

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现卫星图像识别(C#代码,UI界面版)

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现卫星图像识别&#xff08;C#代码&#xff0c;UI界面版&#xff09;工业相机使用YoloV8模型实现水下鱼类识别工业相机通过YoloV8模型实现卫星图像识别的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换…

某d的评论爬虫学习

本教程仅用于技术研究&#xff0c;请确保遵守目标网站的服务条款。实际使用前应获得官方授权&#xff0c;避免高频请求影响服务器&#xff0c;否则可能承担法律责任。此脚本仅拦截公开评论接口&#xff0c;不涉及用户私密数据。请勿修改代码监听其他请求。分享一下爬某抖评论的…

SQLite 注入:理解与防御

SQLite 注入&#xff1a;理解与防御 引言 随着互联网技术的飞速发展&#xff0c;数据库已成为各类应用程序的核心组成部分。SQLite 作为一款轻量级的关系型数据库&#xff0c;广泛应用于移动应用、桌面应用及嵌入式系统。然而&#xff0c;SQLite 数据库也面临着安全挑战&#x…

Java中List集合对象去重及按属性去重

请直接移步原文Java中List集合对象去重及按属性去重的8种方法 只记录自己喜欢的几种方法 对象元素整体去重的2种方法按照对象属性去重的4种方法 预备数据 public class ListRmDuplicate {private List<String> list;private List<Player> playerList;BeforeEac…

ADAS测试:如何用自动化手段提升VV效率

当前&#xff0c;ADAS 技术正在快速发展&#xff0c;从智能巡航控制到自动紧急制动等功能已逐渐成为汽车的标配。在不断提升驾驶辅助能力的同时&#xff0c;系统的可靠性也受到前所未有的重视。为了确保这些关键系统在各种工况下都能正常运行&#xff0c;验证与确认&#xff08…

互信息:理论框架、跨学科应用与前沿进展

1. 起源与核心定义 互信息&#xff08;Mutual Information, MI&#xff09;由克劳德香农&#xff08;Claude Shannon&#xff09; 在1948年开创性论文《A Mathematical Theory of Communication》中首次提出&#xff0c;该论文奠定了现代信息论的基础。互信息用于量化两个随机…

C++模板元编程从入门到精通

之前面试被问到什么是模板元编程&#xff0c;给我问懵了…… 一、什么是模板元编程&#xff08;TMP&#xff09; 模板元编程&#xff08;Template Metaprogramming, TMP&#xff09;是一种利用C模板在编译期执行计算和代码生成的编程范式。它本质上是“编写程序的程序”&#…

探秘CommonJS:Node.js模块化核心解析

CommonJS 是 JavaScript 的模块化规范&#xff0c;主要应用于 服务器端环境&#xff08;尤其是 Node.js&#xff09;&#xff0c;其核心目标是解决代码组织、依赖管理和作用域隔离问题 。以下是其核心要点&#xff1a;&#x1f527; 一、核心特性同步加载 模块通过 require() 同…

Windows 10 远程桌面(RDP)防暴力破解BAT脚本

0x01 设置5次失败后锁定账户30分钟 secpol.msc # 导航到: 安全设置 > 账户策略 > 账户锁定策略 0x02 复制保存到 BlockFailedRDP.ps1 <# .DESCRIPTION 此脚本分析Windows安全日志中的RDP登录失败事件(ID 4625)&#xff0c; 统计每个IP的失败次数&#xff0…

Chukonu 阅读笔记

Chukonu&#xff1a;一个将原生计算引擎集成到 Spark 中的全功能高性能大数据框架 摘要 Apache Spark 是一种广泛部署的大数据分析框架&#xff0c;它提供了诸如弹性、负载均衡和丰富的生态系统等吸引人的特性。然而&#xff0c;其性能仍有很大的改进空间。尽管用原生编程语言编…

51c视觉~3D~合集4

自己的原文哦~ https://blog.51cto.com/whaosoft/14084543 #VGGT-Long 首次将单目3D重建推向公里级极限&#xff01;南开、南大提出&#xff1a;分块、循环、对齐&#xff0c;开源 近年来&#xff0c;3D视觉基础模型&#xff08;Foundation Models&#xff09;在3D感…

实时云渲染将UE像素流嵌入业务系统,实现二维管理系统与数字孪生三维可视化程序的无缝交互

在数字孪生大屏可视化项目中&#xff0c;将实时云渲染技术嵌入业务系统已成为提升用户体验和工作效率的关键策略之一。将云渲染嵌入业务系统&#xff0c;用户可以在执行业务操作时实时看到云渲染画面的响应&#xff0c;同时对云渲染画面的操作也能立即反馈到业务系统中。这种无…