题面

给一棵有根树,这棵树由编号为 \(1\dots N\) 的 \(N\) 个结点组成。根结点的编号为 \(R\)。每个结点都有一个权值,结点 \(i\) 的权值为 \(v_i\)。

接下来有 \(M\) 组操作,操作分为两类:

  • 1 a x,表示将结点 \(a\) 的权值增加 \(x\);
  • 2 a,表示求结点 \(a\) 的子树上所有结点的权值之和。

\(1\leqslant N, M\leqslant 10^6,\) \(1\leqslant R\leqslant N,\) \(-10^6\leqslant v_i, x\leqslant 10^6\).

思路

这道题树剖直接妥妥的 TLE,我们可以考虑用一些更简单的方法解决本题。

首先求 DFS 序,发现同一个子树的所有节点一定是在 DFS 序上的同一个区间的所有元素(显然),直接考虑树状数组维护。

时间复杂度 \(O((N+M)\log N)\),可以通过本题。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std; struct edge{
int nxt,to;
} g[1000005<<1];
int head[1000005],ec;
void add(int u,int v){
g[++ec].nxt=head[u];
g[ec].to=v;
head[u]=ec;
} int dfn[1000005],rev[1000005],v[1000005],ri[1000005];
int n,m,r;
int t[1000005];
int lowbit(int x){
return x&(-x);
}
void update(int p,int v){
while(p<=n){
t[p]+=v;
p+=lowbit(p);
}
}
int query(int p){
int ret=0;
while(p){
ret+=t[p];
p-=lowbit(p);
}
return ret;
} int dfnc;
void dfs(int u,int fa){
rev[u]=(++dfnc);
dfn[dfnc]=u;
ri[u]=dfnc;
update(dfnc,v[u]);
for(int i=head[u];i;i=g[i].nxt){
int v=g[i].to;
if(v==fa)continue;
dfs(v,u);
ri[u]=max(ri[u],ri[v]);
}
} signed main(){
cin>>n>>m>>r;
for(int i=1;i<=n;i++){
cin>>v[i];
}
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
add(u,v);add(v,u);
}
dfs(r,0);
while(m--){
int op,a,x;
cin>>op>>a;
if(op==1){
cin>>x;
update(rev[a],x);
}
else{
cout<<query(ri[a])-query(rev[a]-1)<<'\n';
}
}
return 0;
}

LibreOJ 144. DFS 序 1的更多相关文章

  1. DFS序和7种模型

    DFS序就是将树的节点按照先根的顺序遍历得到的节点顺序 性质:一个子树全在一个连续的区间内,可以与线段树和树状数组搭配使用 很好写,只需在dfs中加几行代码即可. 代码: void dfs(ll u, ...

  2. Libre OJ 144、145 (DFS序)

    部分参考自博客:https://blog.csdn.net/hpu2022/article/details/81910490 在许多问题中,由于树结构复杂通常会导致问题很棘手,因为其实非线性结构,操作 ...

  3. BZOJ_4034 [HAOI2015]树上操作 【树链剖分dfs序+线段树】

    一 题目 [HAOI2015]树上操作 二 分析 树链剖分的题,这里主要用到了$dfs$序,这题比较简单的就是不用求$lca$. 1.和树链剖分一样,先用邻接链表建双向图. 2.跑两遍$dfs$,其实 ...

  4. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  5. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  6. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  7. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  8. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3495  Solved: 1032[Submi ...

  9. 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组

    E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

  10. 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序

    3881: [Coci2015]Divljak Time Limit: 20 Sec  Memory Limit: 768 MBSubmit: 508  Solved: 158[Submit][Sta ...

随机推荐

  1. Android掌控WiFi不完全指南

    前言 如果想要对针对WiFi的攻击进行监测,就需要定期获取WiFi的运行状态,例如WiFi的SSID,WiFi强度,是否开放,加密方式等信息,在Android中通过WiFiManager来实现 WiF ...

  2. python批量依赖包操作

      1.导出所有的python依赖 pip freeze > requirements.txt #requirements.txt 为自定名称,可以指定路径 2.自动安装所有依赖包 pip in ...

  3. Vue报错:component has been registered but not used

    原因: ​​eslint​​代码检查到你注册了组件但没有使用,然后就报错了.比如代码: 比如​​Vue​​​中注册了​​File​​组件,而实际上却没有使用到(直接取消注册为好): ... impor ...

  4. spalsh安装及简单使用

    selenium是浏览器测试自动化工具,很容易完成鼠标点击,翻页等动作,确定是一次只能加载一个页面,无法异步渲染页面,也就限制了selenium爬虫的抓取效率. splash可以实现异步渲染页面,可以 ...

  5. 如何判断多个url的状态 即是否能成功访问?

    假设我们所有的url在excel种我们可以用loadwork 这个库 遍历所有的url 放入 列表 再通过request 或者 httpx 来判断 这个网址status_code 进而放入mongo种 ...

  6. Istio Ambient Mesh七层服务治理图文详解

    摘要:本文主要集中剖析Ambient mesh七层服务治理相关内容. 本文分享自华为云社区<Istio Ambient Mesh七层服务治理图文详解>,作者:华为云云原生团队. 由于Amb ...

  7. HTML躬行记(4)——Web音视频基础

    公司目前的业务会接触比较多的音视频,所以有必要了解一些基本概念. 文章涉及的一些源码已上传至 Github,可随意下载. 一.基础概念 本节音视频的基础概念摘自书籍<FFmpeg入门详解 音视频 ...

  8. docker支持ipv6

    方法 方法一.Pv6地址 不为容器中的服务特别分配IPv6地址. 只要Docker把外部的IPv6地址端口映射到容器的IPv4端口上,随后访问主机的IPv6相应端口即可. 方法二.为Docker网络分 ...

  9. JMeter自定义HTTP组件

    JMeter是一个优秀的开源项目,我们可以在jmeter的官网了解到如何使用和如何二次开发:https://jmeter.apache.org/ 因工作需要,最近做了一个JMeter自定义的http组 ...

  10. EventBridge助力阿里云视觉智能开放平台AI智能存储实践

    本文作者:李建,阿里巴巴达摩院技术专家. 01 视觉智能开放平台(VIAPI)业务场景介绍 阿里云视觉智能开放平台(简称 VIAPI),是基于之前很多技术实践经验积累的 AI 能力的沉淀平台.目前整个 ...