[codeforces] 383C Propagating tree(dfs序+线段树)
题意:
给你一棵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序+线段树)相关推荐
- Codeforces 343D Water Tree(DFS序 + 线段树)
题目大概说给一棵树,进行以下3个操作:把某结点为根的子树中各个结点值设为1.把某结点以及其各个祖先值设为0.询问某结点的值. 对于第一个操作就是经典的DFS序+线段树了.而对于第二个操作,考虑再维护一 ...
- codeforces E. Jamie and Tree LCA+dfs序+线段树
题解: 写起来还稍微有点麻烦. dfs序+线段树可以维护子树的整体修改和查询. 因此,这道题我们要往子树上靠. 我们首先从1号点进行dfs遍历,顺便求出点的dfs序和深度,然后我们采用倍增的思想,可以 ...
- New Year Tree(dfs序+线段树+二进制)
题意: 给出一棵 n个节点的树,根节点为 1.每个节点上有一种颜色 ci.m次操作.操作有两种: 1 u c:将以 u为根的子树上的所有节点的颜色改为c. 2 u:询问以 u为根的子树上的所有节点的颜 ...
- 求和(dfs序+线段树)
题意: 已知有n个节点,有n−1条边,形成一个树的结构. 给定一个根节点k,每个节点都有一个权值,节点i的权值为vi. 给m个操作,操作有两种类型: 1 a x :表示将节点a的权值加上x 2 a ...
- [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 ...
- bzoj3252攻略 贪心+dfs序+线段树
题目链接:戳这里 3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 605 Solved: 255 [Submit][Status] ...
- 【BZOJ-3252】攻略 DFS序 + 线段树 + 贪心
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 339 Solved: 130 [Submit][Status][Discuss] ...
- 【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树
题目大意 给你一棵有根树,有\(n\)个点.还有一个参数\(k\).你每次要删除一条长度为\(k\)(\(k\)个点)的祖先-后代链,问你最少几次删完.现在有\(q\)个询问,每次给你一个\(k\), ...
- dfs序+线段树 BZOJ3252 攻略
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 496 Solved: 211 [Submit][Status][Discuss] ...
最新文章
- 第十六届全国大学生智能车竞赛线上赛点赛道审核 - 广东赛区
- 【Java 并发编程】指令重排序规范 ( happens-before 先行发生原则 )
- (转)国外软件外包项目网站(适用软件兼职)
- Qt Creator指定文本编辑器设置
- python工厂模式 django_python设计模式-工厂方法模式
- 深度学习准备「爆破」著名的欧拉方程
- 转:Linux设备驱动开发(1):内核基础概念
- templet 显示字段外键对应名_主外键和外键约束
- 大学生学java要去培训机构吗?
- 在线图片水印平铺工具
- yum在linux安装mysql数据库_linux安装mysql(yum安装,比较简单)
- 老人机java游戏模拟器_JAVA手机软件模拟工具|JAVA手机游戏模拟器(KEmulator)下载_1.0 免安装版_9号软件下载...
- Linux环境下配置虚拟ip,方法1:新增多个子网卡,每个子网卡有独立的配置文件
- 1. 喵喵宠物管理系统需求分析
- 三维点云处理(5)——Clustering
- 解决zabbix自动发现主机后主机名称是IP地址的问题
- table表格竖列横排显示
- 【小记】LaTex 语法说明
- golang gin框架gorilla的websocket小案例
- linux中一些好玩的程序安装
热门文章
- 计算机操作系统第四版习题答案 第一章简答题
- MATLAB_8-边缘检测_大长腿干扰下识别人脸
- 链表问题14——在单链表种删除指定值的节点
- SpringBoot基于AOP实现自定义非空验证的注解
- 爱送礼成中国好前任,谢谢你让我认识了快递员
- 测试 ClownFish、CYQ、Entity Framework、Moon、MySoft、NHibernate、PDF、XCode数据访问组件性能...
- haproxy 反向代理 tomcat (https、负载均衡)
- 一、cocos2dx之如何优化内存使用(高级篇)
- 职场小窍门:看穿同事性格的16个小动作
- WINDOWS 2008 脱机文件夹