题意:
已知有n个节点,有n−1条边,形成一个树的结构。
给定一个根节点k,每个节点都有一个权值,节点i的权值为vi​。
给m个操作,操作有两种类型:
1 a x :表示将节点a的权值加上x
2 a :表示求a节点的子树上所有节点的和(包括a节点本身)
题解:
dfs序+线段树
用dfs序确定in[x]和out[x]的位置,in是当前结点开始的时间戳,out是回溯到当前结点的时间戳,当查询某结点时,可以快速确定他子树的范围。
代码:

/*Keep on going Never give up*/
//#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
//#define int long long#define endl '\n'
#define Accepted 0
#define AK main()
#define I_can signed
using namespace std;
const int maxn =1e6+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll mod=1e9+7;vector<int> edge[maxn];
int a[maxn];
int in[maxn],out[maxn],id[maxn],cnt;
int tree[maxn<<2];
void dfs(int u,int fa){in[u]=++cnt;id[cnt]=u;for(auto i:edge[u]){if(i==fa) continue;dfs(i,u);}out[u]=cnt;
}void build(int node,int l,int r){if(l==r){tree[node]=a[id[l]];return ;}int mid=(l+r)/2;build(2*node,l,mid);build(2*node+1,mid+1,r);tree[node]=tree[2*node]+tree[2*node+1];}void update(int node,int l,int r,int pos,int val){if(l==r){tree[node]+=val;return ;}int mid=(l+r)/2;if(pos<=mid) update(node*2,l,mid,pos,val);else update(node*2+1,mid+1,r,pos,val);tree[node]=tree[node*2]+tree[node*2+1];
}int query(int node,int l,int r,int start,int ends){if(l>=start&&r<=ends){return tree[node];}int ans=0;int mid=(l+r)/2;if(start<=mid) ans+=query(node*2,l,mid,start,ends);if(ends>mid) ans+=query(node*2+1,mid+1,r,start,ends);return ans;
}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n,m,root;cin>>n>>m>>root;for(int i=1;i<=n;i++) cin>>a[i];for(int i=0;i<n-1;i++){int x,y;cin>>x>>y;edge[x].push_back(y);edge[y].push_back(x);}dfs(root,-1);//for(int i=1;i<=n;i++) cout<<out[i]<<" ";build(1,1,n);for(int i=0;i<m;i++){int opt,x,y;cin>>opt;if(opt==1){cin>>x>>y;update(1,1,n,in[x],y);}else{cin>>x;//cout<<in[x]<<" "<<out[x]<<endl;cout<<query(1,1,n,in[x],out[x])<<endl;}}return 0;
}

求和(dfs序+线段树)相关推荐

  1. New Year Tree(dfs序+线段树+二进制)

    题意: 给出一棵 n个节点的树,根节点为 1.每个节点上有一种颜色 ci.m次操作.操作有两种: 1 u c:将以 u为根的子树上的所有节点的颜色改为c. 2 u:询问以 u为根的子树上的所有节点的颜 ...

  2. 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树

    题目大意 给你一棵有根树,有\(n\)个点.还有一个参数\(k\).你每次要删除一条长度为\(k\)(\(k\)个点)的祖先-后代链,问你最少几次删完.现在有\(q\)个询问,每次给你一个\(k\), ...

  3. codeforces E. Jamie and Tree LCA+dfs序+线段树

    题解: 写起来还稍微有点麻烦. dfs序+线段树可以维护子树的整体修改和查询. 因此,这道题我们要往子树上靠. 我们首先从1号点进行dfs遍历,顺便求出点的dfs序和深度,然后我们采用倍增的思想,可以 ...

  4. Codeforces 343D Water Tree(DFS序 + 线段树)

    题目大概说给一棵树,进行以下3个操作:把某结点为根的子树中各个结点值设为1.把某结点以及其各个祖先值设为0.询问某结点的值. 对于第一个操作就是经典的DFS序+线段树了.而对于第二个操作,考虑再维护一 ...

  5. [CodeForces877 E. Danil and a Part-time Job]dfs序+线段树

    [CodeForces877 E.Danil and a Part-time Job]dfs序+线段树 分类:Data Structure SegMent Tree dfn 1. 题目链接 [Code ...

  6. bzoj3252攻略 贪心+dfs序+线段树

    题目链接:戳这里 3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 605  Solved: 255 [Submit][Status] ...

  7. 【BZOJ-3252】攻略 DFS序 + 线段树 + 贪心

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 339  Solved: 130 [Submit][Status][Discuss] ...

  8. dfs序+线段树 BZOJ3252 攻略

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 496  Solved: 211 [Submit][Status][Discuss] ...

  9. Jittery Roads Gym - 100889J (虚树 + DP + dfs 序, + 线段树)

    每次给一个点集, 求每个点到其他所有点的最大距离: 会修改边权; 修改边权之后, 我们可以用 dfs 序 + 线段树维护 当前点到根节点的距离. 还可以用树状数组 + 差分思想 维护. { dfs 序 ...

最新文章

  1. idea启动java Maven项目,出现“ java: 程序包xxxx不存在“
  2. python 模拟登录博客园并且自动发布一篇文章
  3. 2018年大学生创业项目推荐
  4. PS MAC 2022安装步骤
  5. 使用antd-design-vue配合vue框架搭建项目使用组件显示英文的解决办法
  6. linux电子相册程序,基于Linux电子相册的
  7. Pytest的基本使用
  8. navicat如何连接mysql?navicat 连接mysql Navicat使用教程
  9. 【C语言详解】——文件操作(建议收藏)
  10. 【雷达仿真 | FMCW TDMA-MIMO毫米波雷达信号处理仿真(可修改为DDMA-MIMO)】
  11. LeetCode题目:1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
  12. 微信视频号的抓取记录
  13. 【NOIp普及组 2009】分数线划定
  14. 阿里p7程序员:生活压力大,有房贷不敢离职,离职股票就没了
  15. 更多Windows Phone 8新功能详解
  16. 华为路由器:真机AR1200路由器密码重置
  17. 人生有很多捷径可以走,我却偏偏说不
  18. 《软件方法》第六章 自测题
  19. axure生成的HTML可以直接用吗
  20. 云计算未来发展怎么样 常见云计算应用有哪些

热门文章

  1. 线性回归的改进-岭回归
  2. Mongodb的权限管理
  3. Mysql从5.0升级到 5.1.73
  4. laravel 如何自定义全局的方法/类
  5. linux装nginx
  6. Ubuntu 16.04 LTS 常用工具软件整理(陆续更新)
  7. C++学习笔记24,方法重写与方法隐藏
  8. 怎么将两个list集合按照条件合成一个list
  9. KVM精简教程(一):安装KVM
  10. jetty作为内嵌服务器自启动