Link:

BZOJ 4034 传送门

Solution:

树剖模板题……

Code:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define mid ((l+r)>>1)
#define lc k<<1,l,mid
#define rc k<<1|1,mid+1,r
const int MAXN=1e5+;
struct edge{int to,nxt;}e[MAXN<<];
ll seg[MAXN<<],tag[MAXN<<];
int n,m,x,y,head[MAXN],dep[MAXN],dat[MAXN],sz[MAXN],top[MAXN],pos[MAXN],f[MAXN],cnt,tot; void add_edge(int from,int to)
{e[++tot].nxt=head[from];e[tot].to=to;head[from]=tot;} void dfs1(int x)
{
sz[x]=;
for(int i=head[x];i;i=e[i].nxt)
{
if(e[i].to==f[x]) continue;
f[e[i].to]=x;dep[e[i].to]=dep[x]+;
dfs1(e[i].to);sz[x]+=sz[e[i].to];
}
} void dfs2(int x,int up)
{
int bs=;top[x]=up;pos[x]=++cnt;
for(int i=head[x];i;i=e[i].nxt)
if(e[i].to!=f[x]&&sz[e[i].to]>sz[bs]) bs=e[i].to;
if(!bs) return;
dfs2(bs,up);
for(int i=head[x];i;i=e[i].nxt)
if(e[i].to!=f[x]&&e[i].to!=bs) dfs2(e[i].to,e[i].to);
} void pushdown(int k,int l,int r)
{
if(!tag[k]) return;
tag[k<<]+=tag[k];tag[k<<|]+=tag[k];
seg[k<<]+=tag[k]*(mid-l+);
seg[k<<|]+=tag[k]*(r-mid);
tag[k]=;
} void Update(int a,int b,int x,int k,int l,int r)
{
if(a<=l&&r<=b)
{seg[k]+=1ll*x*(r-l+);tag[k]+=x;return;} pushdown(k,l,r);
if(a<=mid) Update(a,b,x,lc);
if(b>mid) Update(a,b,x,rc);
seg[k]=seg[k<<]+seg[k<<|];
} ll Query(int a,int b,int k,int l,int r)
{
if(a<=l&&r<=b) return seg[k];
ll ret=;pushdown(k,l,r);
if(a<=mid) ret+=Query(a,b,lc);
if(b>mid) ret+=Query(a,b,rc);
return ret;
} ll solve_query(int a,int b)
{
ll ret=;
while(top[a]!=top[b])
{
if(dep[top[a]]<dep[top[b]]) swap(a,b);
ret+=Query(pos[top[a]],pos[a],,,n);
a=f[top[a]];
}
if(pos[a]>pos[b]) swap(a,b);
ret+=Query(pos[a],pos[b],,,n);
return ret;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&dat[i]);
for(int i=;i<n;i++)
scanf("%d%d",&x,&y),add_edge(x,y),add_edge(y,x);
dfs1();dfs2(,);
for(int i=;i<=n;i++) Update(pos[i],pos[i],dat[i],,,n); while(m--)
{
int op,x,a;scanf("%d%d",&op,&x);
if(op!=) scanf("%d",&a);
if(op==) Update(pos[x],pos[x],a,,,n);
else if(op==) Update(pos[x],pos[x]+sz[x]-,a,,,n);
else printf("%lld\n",solve_query(,x));
}
return ;
}

[BZOJ 4034] 树上操作的更多相关文章

  1. BZOJ 4034 树上操作(树的欧拉序列+线段树)

    刷个清新的数据结构题爽一爽? 题意: 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x ...

  2. bzoj 4034: 树上操作 线段树

    题目: 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...

  3. BZOJ 4034"树上操作"(DFS序+线段树)

    传送门 •题意 有一棵点数为 N 的树,以点 1 为根,且树点有边权. 然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的 ...

  4. BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 )

    BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 ) 题意分析 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 ...

  5. bzoj 4034: [HAOI2015]树上操作 树链剖分+线段树

    4034: [HAOI2015]树上操作 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4352  Solved: 1387[Submit][Stat ...

  6. bzoj 4034: [HAOI2015]树上操作 (树剖+线段树 子树操作)

    4034: [HAOI2015]树上操作 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 6779  Solved: 2275[Submit][Stat ...

  7. [BZOJ]4034: [HAOI2015]树上操作

    [HAOI2015]树上操作 传送门 题目大意:三个操作 1:a,b,c b节点权值+c 2:a,b,c 以b为根的子树节点权值全部+c 3:a,b 查询b到根路径的权值和. 题解:树链剖分 操作1 ...

  8. bzoj千题计划242:bzoj4034: [HAOI2015]树上操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=4034 dfs序,树链剖分 #include<cstdio> #include<io ...

  9. 4034: [HAOI2015]树上操作

    4034: [HAOI2015]树上操作 链接 思路: 树链剖分.操作:单点修改,路径查询,子树修改. 代码: #include<cstdio> #include<algorithm ...

随机推荐

  1. 统计无符号整数二进制中1的个数(Hamming weight)

    1.问题来源 之所以来记录这个问题的解法,是因为在在线编程中经常遇到,比如编程之美和京东的校招笔试以及很多其他公司都累此不疲的出这个考题.看似简单的问题,背后却隐藏着很多精妙的解法.查找网上资料,才知 ...

  2. 【COGS 1534】 [NEERC 2004]K小数 &&【COGS 930】 [河南省队2012] 找第k小的数 可持久化01Trie

    板子题,只是记得负数加fix最方便 #include <cstdio> ,N=; namespace FIFO { <<],*S=B,*T=B; #define getc() ...

  3. Spring源码解析-事件

    Spring事件的组件 主要是3个组件: 1.ApplicationEvent   事件 2.ApplicationListener 监听器,对事件进行监听 3.ApplicationEventMul ...

  4. 使用XTU降低CPU功耗,自动执行不失效

    INTEL出品的XTU可以用来做软超频操作,给CPU/GPU加电压超频,也可以通过降低CPU/GPU电压来减少功耗. 以前用XTU设置好了之后,过一段时间就自动失效了,最近失效的频率突然很高,于是找了 ...

  5. MySQL里执行SHOW INDEX结果中Cardinality的含义

    今天在写一个Perl脚本,想自动化查找出MySQL数据库中可能无效的索引,于是根据朝阳的书上提到的一些规则,我来设计了一些判断方法,其中发现某个我想要的值就是SHOW INDEX FROM table ...

  6. 解析json方式之net.sf.json

    前面转载了json解析的技术:fastjson,今天说下另外一种技术. 下载地址 本次使用版本:http://sourceforge.net/projects/json-lib/files/json- ...

  7. Kafka自我学习2-Zookeeper cluster

    Test enviroment : zoo1, zoo2, zoo3 cluster 1. Install zookeeper, package in kafka [root@zoo1 ~]# pwd ...

  8. HTTP协议中的ContenType类型大全(转)

    ".*"="application/octet-stream"".001"="application/x-001"&qu ...

  9. IDEA新建时选项没有java class问题

    解决办法: 点击你的project F4打开project stucture 点击左边的module 点击右边的source后添加src就可以了  添加的src就是源码可以放置的地址

  10. 【洛谷 P3805】 【模板】manacher算法

    题目链接 manacher算法:在线性时间内求一个字符串中所有/最长回文串的算法. 先来考虑一下暴力的算法,枚举每个中点,向两边扩展,时间复杂度\(O(n^2)\). 来分析下此算法的缺点. 1.因为 ...