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
英文地址,請注明出處:http://en.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;同時對云渲染畫面的操作也能立即反饋到業務系統中。這種無…