题意:
给你一棵n个结点的树, 以1为根。每个结点有点权。有m次操作:
1.x结点权值 +val,x的儿子权值 −val,x的孙子们 +val,以此类推。
2.询问x的点权;
题解:
我们首先跑一边dfs序,顺便求除每个结点的深度。
我们把他分成两颗线段树,深度为奇数的在第一颗上,深度为偶数的在第二课上。
我们每次对两颗线段树同时操作。
第一颗线段树只进行+操作,第二棵线段树只-操作。
当我们询问某个点时,我们只需要判断一下这个点的奇偶,决定查询哪颗树即可。

/*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 =4e5+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],cnt;
int tree[2][maxn<<2];
int deep[maxn];
void dfs(int u,int fa){in[u]=++cnt;deep[u]=deep[fa]+1;for(auto i:edge[u]){if(i==fa) continue;dfs(i,u);}out[u]=cnt;
}void push(int node,int x){if(tree[x][node]){tree[x][node*2]+=tree[x][node];tree[x][node*2+1]+=tree[x][node];tree[x][node]=0;}return;
}void update(int node,int l,int r,int start,int ends,int x,int val){if(start<=l&&ends>=r){tree[x][node]+=val;//cout<<tree[x][node]<<endl;return;}push(node,x);int mid=(l+r)/2;if(start<=mid) update(node*2,l,mid,start,ends,x,val);if(mid<ends) update(node*2+1,mid+1,r,start,ends,x,val);
}int query(int node,int l,int r,int pos,int x){if(l==r){//cout<<tree[x][node]<<endl;return tree[x][node];}push(node,x);int mid=(l+r)/2;if(pos<=mid) return query(node*2,l,mid,pos,x);else return query(node*2+1,mid+1,r,pos,x);
}signed main(){//ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n,m;cin>>n>>m;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(1,0);//for(int i=1;i<=n;i++) cout<<in[i]<<" ";for(int i=0;i<m;i++){int opt,x,y;cin>>opt;if(opt==1){          //246   296cin>>x>>y;//cout<<in[x]<<" "<<out[x]<<endl;update(1,1,n,in[x],out[x],deep[x]&1,y);update(1,1,n,in[x],out[x],!(deep[x]&1),-y);}else{cin>>x;cout<<query(1,1,n,in[x],deep[x]&1)+a[x]<<endl;}}return 0;
}

[codeforces] 383C Propagating tree(dfs序+线段树)相关推荐

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

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

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

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

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

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

  4. 求和(dfs序+线段树)

    题意: 已知有n个节点,有n−1条边,形成一个树的结构. 给定一个根节点k,每个节点都有一个权值,节点i的权值为vi​. 给m个操作,操作有两种类型: 1 a x :表示将节点a的权值加上x 2 a ...

  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. 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树

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

  9. dfs序+线段树 BZOJ3252 攻略

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

最新文章

  1. 第十六届全国大学生智能车竞赛线上赛点赛道审核 - 广东赛区
  2. 【Java 并发编程】指令重排序规范 ( happens-before 先行发生原则 )
  3. (转)国外软件外包项目网站(适用软件兼职)
  4. Qt Creator指定文本编辑器设置
  5. python工厂模式 django_python设计模式-工厂方法模式
  6. 深度学习准备「爆破」著名的欧拉方程
  7. 转:Linux设备驱动开发(1):内核基础概念
  8. templet 显示字段外键对应名_主外键和外键约束
  9. 大学生学java要去培训机构吗?
  10. 在线图片水印平铺工具
  11. yum在linux安装mysql数据库_linux安装mysql(yum安装,比较简单)
  12. 老人机java游戏模拟器_JAVA手机软件模拟工具|JAVA手机游戏模拟器(KEmulator)下载_1.0 免安装版_9号软件下载...
  13. Linux环境下配置虚拟ip,方法1:新增多个子网卡,每个子网卡有独立的配置文件
  14. 1. 喵喵宠物管理系统需求分析
  15. 三维点云处理(5)——Clustering
  16. 解决zabbix自动发现主机后主机名称是IP地址的问题
  17. table表格竖列横排显示
  18. 【小记】LaTex 语法说明
  19. golang gin框架gorilla的websocket小案例
  20. linux中一些好玩的程序安装

热门文章

  1. 计算机操作系统第四版习题答案 第一章简答题
  2. MATLAB_8-边缘检测_大长腿干扰下识别人脸
  3. 链表问题14——在单链表种删除指定值的节点
  4. SpringBoot基于AOP实现自定义非空验证的注解
  5. 爱送礼成中国好前任,谢谢你让我认识了快递员
  6. 测试 ClownFish、CYQ、Entity Framework、Moon、MySoft、NHibernate、PDF、XCode数据访问组件性能...
  7. haproxy 反向代理 tomcat (https、负载均衡)
  8. 一、cocos2dx之如何优化内存使用(高级篇)
  9. 职场小窍门:看穿同事性格的16个小动作
  10. WINDOWS 2008 脱机文件夹