BZOJ4034_树上操作_KEY
这道题可以树链剖分+线段树。
其他操作模板,第二个操作只需要将x~x+size[x]-1区间加值即可。
code:
- #include <cstdio>
- #include <cstring>
- using namespace std;
- int read(){
- char c;while(c=getchar(),(c<''||c>'')&&c!='-');
- int x=,y=;c=='-'?y=-:x=c-'';
- while(c=getchar(),c>=''&&c<='')x=x*+c-'';
- return x*y;
- }
- const int Maxn=;
- int N,Q,A[Maxn];
- int head[Maxn],nxt[Maxn<<],to[Maxn<<],Cnt;
- void Add(int x,int y){
- to[Cnt]=y;
- nxt[Cnt]=head[x];
- head[x]=Cnt;
- Cnt++;
- }
- int Son[Maxn],Size[Maxn],f[Maxn];
- int Dep[Maxn],Dfn[Maxn],Top[Maxn];
- int C;
- void Find(int Now,int Deep,int Bef){
- f[Now]=Bef,Dep[Now]=Deep,Size[Now]=;
- for(int i=head[Now];i!=-;i=nxt[i]){
- if(to[i]==f[Now])continue;
- Find(to[i],Deep+,Now);
- Size[Now]+=Size[to[i]];
- if(Size[to[i]]>Size[Son[Now]])
- Son[Now]=to[i];
- }
- return ;
- }
- void Fs(int Now,int Tp){
- Dfn[Now]=++C,Top[Now]=Tp;
- if(Son[Now])Fs(Son[Now],Tp);
- for(int i=head[Now];i!=-;i=nxt[i]){
- if(to[i]==Son[Now]||to[i]==f[Now])continue;
- Fs(to[i],to[i]);
- }
- return ;
- }
- long long Seg[Maxn<<],Ade[Maxn<<];
- void Up(int x){Seg[x]=Seg[x<<]+Seg[x<<|];}
- void Down(int x,long long l,long long r){
- if(!Ade[x])return ;
- Seg[x<<]+=Ade[x]*l;
- Seg[x<<|]+=Ade[x]*r;
- Ade[x<<]+=Ade[x];
- Ade[x<<|]+=Ade[x];
- Ade[x]=;
- }
- void Updata(int Node,int L,int R,int Ul,int Ur,long long Val){
- if(Ul<=L&&Ur>=R){
- Seg[Node]+=Val*(R-L+);
- Ade[Node]+=Val;
- return ;
- }
- int Mid=L+R>>;
- Down(Node,Mid-L+,R-Mid);
- if(Mid>=Ul)Updata(Node<<,L,Mid,Ul,Ur,Val);
- if(Mid< Ur)Updata(Node<<|,Mid+,R,Ul,Ur,Val);
- Up(Node);
- }
- long long Query(int Node,int L,int R,int Ql,int Qr){
- if(Ql<=L&&Qr>=R)return Seg[Node];
- int Mid=L+R>>;
- Down(Node,Mid-L+,R-Mid);
- long long Ans=;
- if(Mid>=Ql)Ans+=Query(Node<<,L,Mid,Ql,Qr);
- if(Mid< Qr)Ans+=Query(Node<<|,Mid+,R,Ql,Qr);
- return Ans;
- }
- long long G(int Node){
- long long Ans=;
- while(Top[Node]){
- Ans+=Query(,,N,Dfn[Top[Node]],Dfn[Node]);
- Node=f[Top[Node]];
- }
- return Ans;
- }
- int main()
- {
- memset(head,-,sizeof head);
- N=read(),Q=read();
- for(int i=;i<=N;i++)A[i]=read();
- for(int i=;i<N;i++){
- int x=read(),y=read();
- Add(x,y),Add(y,x);
- }
- Find(,,),Fs(,);
- for(int i=;i<=N;i++)
- Updata(,,N,Dfn[i],Dfn[i],A[i]);
- for(int i=;i<=Q;i++){
- int Type=read(),x=read();
- if(Type==)Updata(,,N,Dfn[x],Dfn[x],read());
- if(Type==)Updata(,,N,Dfn[x],Dfn[x]+Size[x]-,read());
- if(Type==)printf("%lld\n",G(x));
- }
- return ;
- }
BZOJ4034_树上操作_KEY的更多相关文章
- 【BZOJ4034】[HAOI2015]树上操作 树链剖分+线段树
[BZOJ4034][HAOI2015]树上操作 Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 ...
- HAOI2015 树上操作
HAOI2015 树上操作 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根 ...
- bzoj千题计划242:bzoj4034: [HAOI2015]树上操作
http://www.lydsy.com/JudgeOnline/problem.php?id=4034 dfs序,树链剖分 #include<cstdio> #include<io ...
- bzoj4034[HAOI2015]树上操作 树链剖分+线段树
4034: [HAOI2015]树上操作 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 6163 Solved: 2025[Submit][Stat ...
- 树剖||树链剖分||线段树||BZOJ4034||Luogu3178||[HAOI2015]树上操作
题面:P3178 [HAOI2015]树上操作 好像其他人都嫌这道题太容易了懒得讲,好吧那我讲. 题解:第一个操作和第二个操作本质上是一样的,所以可以合并.唯一值得讲的点就是:第二个操作要求把某个节点 ...
- P3178 [HAOI2015]树上操作
P3178 [HAOI2015]树上操作 思路 板子嘛,其实我感觉树剖没啥脑子 就是debug 代码 #include <bits/stdc++.h> #define int long l ...
- bzoj 4034: [HAOI2015]树上操作 树链剖分+线段树
4034: [HAOI2015]树上操作 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4352 Solved: 1387[Submit][Stat ...
- bzoj 4034: [HAOI2015]树上操作 (树剖+线段树 子树操作)
4034: [HAOI2015]树上操作 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 6779 Solved: 2275[Submit][Stat ...
- BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 )
BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 ) 题意分析 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 ...
随机推荐
- Running Protractor Tests on Docker
配置这个Protractor环境真是折磨死人了,webdriver-manage update怎么都不成功,即使自己下载好chromederiver放到相应文件夹下,也不能使用.费时三四天终于按照ht ...
- BZOJ1880:[SDOI2009]Elaxia的路线(最短路,拓扑排序)
Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...
- 【jQuery】学习jQuery插件的使用与写法(表单验证插件-validation)
最新最全的插件可以从jQuery官方网站的插件板块下载,网站地址为:http://plugins.jquery.com/ Validation优点:内置验证规则:自定义验证规则:简单强大的验证信息提示 ...
- l2-loss,l2正则化,l2范数,欧式距离
欧式距离: l2范数: l2正则化: l2-loss(也叫平方损失函数): http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimic ...
- Exp6 信息收集与漏洞扫描 20164314
一.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 二.实践内容 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务 ...
- Mac 下 SVN 的使用
在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...
- css z-index之object flash层级问题
<object type="application/x-shockwave-flash" data="flash文件路径" style="z-i ...
- 配置tomcat的用户名和密码
<role rolename="manager-gui"/> <role rolename="manager-script"/> < ...
- 编译nginx错误:make[1]: *** [/pcre//Makefile] Error 127
--with-pcre=DIR 是设置源码目录,而不是编译安装后的目录.
- 关于DP
关于DP 似乎摸到了门槛呢,学着学着Dijkstra突然有了感觉. 我们遍历的时候会遍历整张图的每个点每条边,然后与已知的对比大小,如果比现在方案好,就放入数组 那么,DP岂不是同样的思想? 在背包问 ...