[bzoj4034]树上操作
dfs序(注意出栈时也要加入),然后对于每一次一个节点的修改,都在左端点上打+x,右端点上打-x,区间修改同理(因此要用线段树且需要维护区间左端点数量-右端点数量)。对于询问操作,就是dfs序上的一段前缀和,用线段树处理即可。
1 #include<cstdio> 2 #include<cstring> 3 #define ll long long 4 #define maxN 100001 5 #define L (k<<1) 6 #define R ((k<<1)+1) 7 #define mid ((l+r)>>1) 8 struct ji{ 9 int next,to; 10 }edge[maxN<<1]; 11 struct node{ 12 ll k,s,lazy; 13 }f[maxN<<4]; 14 ll E,n,m,x,y,a[maxN],head[maxN],l[maxN],r[maxN]; 15 bool vis[maxN<<1]; 16 void init(){ 17 E=0; 18 memset(head,-1,sizeof(head)); 19 } 20 void add(int x,int y){ 21 edge[E].next=head[x]; 22 edge[E].to=y; 23 head[x]=E++; 24 } 25 void up(int k){ 26 f[k].k=f[L].k+f[R].k+f[k].lazy*(f[k].s=f[L].s+f[R].s); 27 } 28 void down(int k){ 29 f[L].lazy+=f[k].lazy; 30 f[L].k+=f[k].lazy*f[L].s; 31 f[R].lazy+=f[k].lazy; 32 f[R].k+=f[k].lazy*f[R].s; 33 f[k].lazy=0; 34 } 35 void update(int k,int l,int r,int x,int y,int z){ 36 if ((r<x)||(l>y))return; 37 if ((x<=l)&&(r<=y)){ 38 if (l==r) 39 if (vis[l])f[k].s=1; 40 else f[k].s=-1; 41 f[k].k+=f[k].s*z; 42 f[k].lazy+=z; 43 return; 44 } 45 update(L,l,mid,x,y,z); 46 update(R,mid+1,r,x,y,z); 47 up(k); 48 } 49 ll query(int k,int l,int r,int x,int y){ 50 if ((l>y)||(r<x))return 0; 51 if ((x<=l)&&(y>=r))return f[k].k; 52 down(k); 53 return query(L,l,mid,x,y)+query(R,mid+1,r,x,y); 54 } 55 void dfs(int k,int f){ 56 vis[l[k]=++x]=true; 57 for(int i=head[k];i!=-1;i=edge[i].next) 58 if (edge[i].to!=f)dfs(edge[i].to,k); 59 r[k]=++x; 60 } 61 int main(){ 62 int p; 63 init(); 64 scanf("%lld%lld",&n,&m); 65 for(int i=1;i<=n;i++)scanf("%lld",&a[i]); 66 for(int i=1;i<n;i++){ 67 scanf("%lld%lld",&x,&y); 68 add(x,y); 69 add(y,x); 70 } 71 x=0; 72 dfs(1,0); 73 for(int i=1;i<=n;i++){ 74 update(1,1,2*n,l[i],l[i],a[i]); 75 update(1,1,2*n,r[i],r[i],a[i]); 76 } 77 n*=2; 78 for(int i=1;i<=m;i++){ 79 scanf("%d%lld",&p,&x); 80 if (p<3)scanf("%lld",&y); 81 if (p==1){ 82 update(1,1,n,l[x],l[x],y); 83 update(1,1,n,r[x],r[x],y); 84 } 85 if (p==2)update(1,1,n,l[x],r[x],y); 86 if (p==3)printf("%lld\n",query(1,1,n,1,l[x])); 87 } 88 }
View Code
转载于:https://www.cnblogs.com/PYWBKTDA/p/11249921.html
[bzoj4034]树上操作相关推荐
- BZOJ4034 树上操作
目录 BZOJ4034 树上操作 题解 code BZOJ4034 树上操作 题目传送门 题解 裸的树剖,写的时候注意细节即可. code #include <bits/stdc++.h> ...
- BZOJ4034 树上操作(树剖 线段树大模板)
BZOJ4034 long long 是大坑点 貌似long long 跟int 乘起来会搞事情?... A了这题线段树和树剖的基础OK 嘛 重点过掉的还是线段树区间更新的lazy tag吧 #inc ...
- P3178 [HAOI2015]树上操作
P3178 [HAOI2015]树上操作 题意: 题解: 这已经是很裸的树链剖分了... 直接套模板 代码: #include<cmath> #include<cstdio> ...
- BZOJ 4043 [HAOI2015]树上操作 dfs序 线段树
$ \Rightarrow $ 戳我进BZOJ原题 $ \Rightarrow $ 戳我进洛谷原题 [HAOI2015]树上操作 Time Limit: 10 Sec Memory Limit: 25 ...
- bzoj 4034: [HAOI2015]树上操作(树链剖分+线段树区间更新)
4034: [HAOI2015]树上操作 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 4981 Solved: 1603 [Submit][St ...
- bzoj4034: [HAOI2015]树上操作
这题其实就是树剖裸题啊. 然后毒瘤选手由于上题树剖被卡到哭所以选择dfs序+树状数组. 不得不说简单的算法做出来更加难思考.然后网上的dalao们都一笔带过净说什么用两个树状数组维护就可以啦. 经过大 ...
- [HAOI2015]树上操作
题目大意: 给你一棵n个点的树,以1为根,每个点都有一个点权,要求进行如下操作: 1.将x这个点的点权加上a: 2.将以x这个点为根的子树中每个点的点权加上a: 3.查询从x到根的路径的点权和. 思路 ...
- COJ 1008 WZJ的数据结构(八) 树上操作
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=986 WZJ的数据结构(八) 难度级别:E: 运行时间限制:3000ms: ...
- [BZOJ 4034][HAOI2015]树上操作(欧拉序列+线段树)
Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中 ...
最新文章
- 从一起丢包故障来谈谈 nginx 中的 tcp keep-alive
- vimdiff使用总结
- 跨服务器Session共享的四种方法
- 工业物联网发展环境加速形成 中国企业如何突围?
- 第2章 Python 数字图像处理(DIP) --数字图像基础3 - 图像内插 - 最近邻内插 - 双线性插值 - 双三次内插 - 图像放大
- java 根据客户端重定向_JavaWeb【1.4HttpServletResponse类、重定向】
- Nginx核心原理揭秘:Nginx为什么高效?
- java8中的接口与时间操作
- Apache Flink Meetup 8.7 深圳站改为线上
- mysql 中时间和日期函数应用
- 苹果电脑拷贝文件到u盘很慢_小米最硬核U盘!20g,3.1接口,120MB/S读取速度,可连iphone华为...
- IT编程宝园资料分享
- linux中把程序启到前台,Linux程序前台后台切换
- SpringBoot下载Excel文件,在Wps上可以打开但是Office上的excel打不开的问题
- sketch常用快捷键键盘对应
- sx1278lora模块的常见问题解答
- VsCode新建VueJs项目
- 日本亚马逊海淘转运公司好?日亚转运公司攻略
- 一行Python都可以做什么?这35行看懂十行就算入门,全能看懂必是高手
- 恋前体检!您接受吗?
热门文章
- 网络流题目详讲+题单(提高版)(持续更新中......)
- Mysql 索引的基础(下)
- linq to sql简单使用
- SQLServer禁用、启用外键约束
- 玩转html5(五)---月球绕着地球转,地球绕着太阳转(canvas实现,同样可以动哦)...
- 【转】Service深入分析
- KillTimer析构函数
- 让ModalPopupExtender的控制控件能响应服务器事件
- 4 系统的 CPU 使用率很高,但为啥却找不到高 CPU的应用?
- android记账软件开发源代码_如何开发直播软件?直播软件开发的具体流程有哪些?...