Codeforces 384E-线段树+dfs序
如果这题只传到儿子不继续向下就是裸的dfs序+线段树,继续往下传的还改变正负号,我们可以根据它的层数来确定正负号
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define lson (id<<1)
#define rson ((id<<1)|1)
#define mid ((l+r)>>1)
const int maxn=;
using namespace std;
int t;
int p;
int n,m;
int u,v;
int x,val;
int dep[maxn+];
int a[maxn+];
int pos[maxn+];
int q[maxn+];
int son[maxn+];
int tree[maxn*+];
int sum[maxn*+];
int lazy[maxn*+];
vector<int> G[maxn+];
void push_up(int id){
tree[id]=tree[lson]+tree[rson];
}
void push_down(int id,int l,int r){
if(lazy[id]){
lazy[lson]+=lazy[id];
lazy[rson]+=lazy[id];
tree[lson]+=(mid-l+)*lazy[id];
tree[rson]+=(r-mid)*lazy[id];
lazy[id]=;
}
return ;
}
void build(int id,int l,int r){
if(l==r){
sum[id]=a[pos[l]];
return ;
}
build(lson,l,mid);
build(rson,mid+,r);
push_up(id);
return ;
}
void update(int id,int l,int r,int x,int y,int val){
if(l==x&&r==y){
tree[id]+=val*(r-l+);
lazy[id]+=val;
return ;
}
push_down(id,l,r);
if(x>mid){
update(rson,mid+,r,x,y,val);
} else if(y<=mid){
update(lson,l,mid,x,y,val);
} else {
update(lson,l,mid,x,mid,val);
update(rson,mid+,r,mid+,y,val);
}
}
int fi(int id,int l,int r,int x){
if(l==r){
int temp=dep[pos[l]]&;
if(!temp) temp=-;
return sum[id]+lazy[id]*temp;
}
push_down(id,l,r);
if(x<=mid){
return fi(lson,l,mid,x);
} else {
return fi(rson,mid+,r,x);
}
}
void dfs(int x,int fa,int d){
dep[x]=d;
pos[++p]=x;
q[x]=p;
for(size_t i=;i<G[x].size();i++){
if(G[x][i]==fa) continue;
dfs(G[x][i],x,d+);
son[x]++;
son[x]+=son[G[x][i]];
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=;i<n;i++){
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs(,,);
build(,,n);
for(int i=;i<=m;i++){
scanf("%d",&t);
if(t==){
scanf("%d%d",&x,&val);
if(dep[x]&)
update(,,n,q[x],q[x]+son[x],val);
else update(,,n,q[x],q[x]+son[x],-val);
} else {
scanf("%d",&x);
int ans=fi(,,n,q[x]);
printf("%d\n",ans);
}
}
return ;
}
Codeforces 384E-线段树+dfs序的更多相关文章
- Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序
题目:http://www.tsinsen.com/A1505 A1505. 树(张闻涛) 时间限制:1.0s 内存限制:512.0MB 总提交次数:196 AC次数:65 平均分: ...
- BZOJ_3252_攻略_线段树+dfs序
BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...
- 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序
题目大意 Bob有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜 ...
- 【bzoj4817】树点涂色 LCT+线段树+dfs序
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...
- S - Query on a tree HDU - 3804 线段树+dfs序
S - Query on a tree HDU - 3804 离散化+权值线段树 题目大意:给你一棵树,让你求这棵树上询问的点到根节点直接最大小于等于val的长度. 这个题目和之前写的那个给你一棵 ...
- HDU 5692 线段树+dfs序
Snacks Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- Codeforces 571D - Campus(并查集+线段树+DFS 序,hot tea)
Codeforces 题目传送门 & 洛谷题目传送门 看到集合的合并,可以本能地想到并查集. 不过这题的操作与传统意义上的并查集不太一样,传统意义上的并查集一般是用来判断连通性的,而此题还需支 ...
- Codeforces 343D WaterTree - 线段树, DFS序
Description Translated by @Nishikino_Maki from Luogu 行吧是我翻的 Mad scientist Mike has constructed a roo ...
- Codeforces 877E - Danil and a Part-time Job 线段树+dfs序
给一个有根树,1e5个节点,每个节点有权值0/.1,1e5操作:1.将一个点的子树上所有点权值取反2.查询一个点的子树的权值和 题解: 先深搜整颗树,用dfs序建立每个点对应的区间,等于把树拍扁成 ...
- K. Random Numbers(Gym 101466K + 线段树 + dfs序 + 快速幂 + 唯一分解)
题目链接:http://codeforces.com/gym/101466/problem/K 题目: 题意: 给你一棵有n个节点的树,根节点始终为0,有两种操作: 1.RAND:查询以u为根节点的子 ...
随机推荐
- BZOJ 1685 [Usaco2005 Oct]Allowance 津贴:贪心【给硬币问题】
题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1333 题意: 有n种不同币值的硬币,并保证大币值一定是小币值的倍数. 每种硬币的币值为 ...
- Jmeter-聚合报告
线程组右键--添加--监听器--聚合报告 Aggreagete Report:jmeter最常用的一个Listener,“聚合报告”. Label:每个jmeter的element(例如HTTP Re ...
- springMVC源代码阅读之servlet部分<一>servlet部分详解
[一]servlet的概念
- 【Lintcode】105.Copy List with Random Pointer
题目: A linked list is given such that each node contains an additional random pointer which could poi ...
- Jenkins持续集成环境搭建
1部署Jenkins Jenkins部署很简单,只需建立一个新应用,将Jenkins的war包部署进去,再分配好权限就可以了. 1.1创建应用 建立一个新Nginx应用:jenkins.com 1.2 ...
- MYSQL学习二 关于左连接
工作中有如下的SQL, 针对A.ID ='abcdefg', left join B和C两个表,来查找其他信息.就算是B和C中没有任何满足条件的记录,最后结果也肯定不是空.因为A.ID ='abc ...
- 1.改变项目 动态库、静态库属性。 2.使用运行库 /MD、/MT、/LD说明
/MD./MT./LD(使用运行库) 有关 C 运行库以及使用 /clr(公共语言运行时编译) 进行编译时要使用哪些库的更多信息,请参见 CRT 库功能. 传递给链接器的给定调用的所有模块都必须使用相 ...
- Docker入门(一):简介
这个<Docker入门>系列文档,是我根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家 ...
- 文件解析库doctotext源码分析
doctotext中没有make install选项,make后生成可执行文件 在buile目录下面有.so动态库和头文件,需要的可以从这里面拷贝 build/doctotext就是可执行程序. ...
- 34.Docker安装Mysql参数及环境变量使用
容器安装好后,通过exec进去到容器的内部, 容器安装的时候两种容器配置参数 直接在镜像的后面加配置 第二种方式 把这段代码拷贝过来.参数我们可以写在镜像的后面 我们把参数写在镜像的后面 然后我们需要 ...