LibreOJ 144. DFS 序 1
题面
给一棵有根树,这棵树由编号为 \(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的更多相关文章
- DFS序和7种模型
DFS序就是将树的节点按照先根的顺序遍历得到的节点顺序 性质:一个子树全在一个连续的区间内,可以与线段树和树状数组搭配使用 很好写,只需在dfs中加几行代码即可. 代码: void dfs(ll u, ...
- Libre OJ 144、145 (DFS序)
部分参考自博客:https://blog.csdn.net/hpu2022/article/details/81910490 在许多问题中,由于树结构复杂通常会导致问题很棘手,因为其实非线性结构,操作 ...
- BZOJ_4034 [HAOI2015]树上操作 【树链剖分dfs序+线段树】
一 题目 [HAOI2015]树上操作 二 分析 树链剖分的题,这里主要用到了$dfs$序,这题比较简单的就是不用求$lca$. 1.和树链剖分一样,先用邻接链表建双向图. 2.跑两遍$dfs$,其实 ...
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3495 Solved: 1032[Submi ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
- 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序
3881: [Coci2015]Divljak Time Limit: 20 Sec Memory Limit: 768 MBSubmit: 508 Solved: 158[Submit][Sta ...
随机推荐
- 【单片机入门】(四)应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用
引言 各位大佬,晚上好啊,在上一篇博客中,我们讲了什么是UART串口通讯,以及使用USB转TTL使得单片机可以和c#上位机做一个串口通讯,接下来,为大家带来PWM的概念原理,以及实际案例,使用PWM对 ...
- 「浙江理工大学ACM入队200题系列」问题 B: 零基础学C/C++12——求平均值
本题是浙江理工大学ACM入队200题第二套中的B题 我们先来看一下这题的题面. 由于是比较靠前的题目,这里插一句.各位新ACMer朋友们,请一定要养成仔细耐心看题的习惯,尤其是要利用好输入和输出样例. ...
- pagehelper使用有误导致sql多了一个limit
接口测试报告中发现时不时有一个接口报错,但再跑一次又没有这个报错了.报错信息是sql异常,sql中有两个limit.查看后台代码和XXmapper.xml,发现确实只有一个limit.一开始开发以为是 ...
- 如何在kali Linux上安装VMware Tools
作用: 1.让虚拟机和本地上的文件可以互传,直接拖动就可以实现转接 2.可在虚拟机上执行本地脚本 3.本地时钟与虚拟机同步 4........... 方法: 1.运行虚拟机 2.在上方菜单栏中点击安装 ...
- 为什么Linux需要虚拟内存 [转载好文]
操作系统中的 CPU 和主内存(Main memory)都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的 CPU 和内存资源,操作系统会使用 CPU 调度器分配 CPU 时间1并引入虚拟内存系 ...
- springboot +mybatis (@autowried 注入mapper :爆红)
问题描述:Could not autowire. No beans of XXXXmapper' type found 问题相关页面: 解决方式一:@mapper 接口计入@Repository 解 ...
- 这么简单,还不会使用java8 stream流的map()方法吗?
一.前言 在日常的开发工作中经常碰到要处理list中数据的问题,比如从数据库中查出了很多学生,由于一些原因需要在内存中找出这些学生中的所有姓名,或者把名为"王五"的语文成绩暂时修改 ...
- 【zookeeper】Zookeeper相关概念、重难点(myid)、语法、使用、工具
1234567890 1请按照我是想额度插入fvtgb6yhn7ujm8ik,9ol.
- 1.5.5 HDFS读写解析-hadoop-最全最完整的保姆级的java大数据学习资料
目录 1.5.5 HDFS读写解析 1.5.5.1 HDFS读数据流程 1.5.5.2 HDFS写数据流程 1.5.5 HDFS读写解析 1.5.5.1 HDFS读数据流程 客户端通过Distribu ...
- 创建第一个WebService项目
前提: 保证联网的情况下创建webservice实例,需下载依赖jar 一.创建WebService服务端 1.创建服务端的工程 2.创建javaee的WebServices服务 3.命名server ...