用一个差分树状数组维护一下每个深度的和,然后每次拿着路径端点和lca加一加减一减就行了

 #include<bits/stdc++.h>
#define pa pair<int,int>
#define ll long long
using namespace std;
const int maxn=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N,M,L=;
int eg[maxn*][],egh[maxn],ect;
int dep[maxn],fa[maxn],v[maxn];
int qu[maxn*][],qh[maxn],op[maxn][];
ll tr[maxn];
bool flag[maxn]; inline int lowbit(int x){return x&(-x);}
inline int getfa(int x){return x==fa[x]?x:fa[x]=getfa(fa[x]);}
inline void adeg(int a,int b){
eg[++ect][]=b;eg[ect][]=egh[a];egh[a]=ect;
}inline void adq(int a,int b,int i){
qu[i][]=b;qu[i][]=qh[a];qh[a]=i;
} inline void add(int x,int y){
for(;x&&x<=L;x+=lowbit(x)) tr[x]+=y;
}
inline ll query(int x){
ll re=;for(;x;x-=lowbit(x)) re+=tr[x];return re;
} void tarjan(int x){
flag[x]=;
for(int i=egh[x];i!=-;i=eg[i][]){
if(flag[eg[i][]]) continue;
dep[eg[i][]]=dep[x]+;L=max(L,dep[x]+);
tarjan(eg[i][]);fa[getfa(eg[i][])]=getfa(x);
}
for(int i=qh[x];i!=-;i=qu[i][]){
if(flag[qu[i][]]) op[i>>][]=getfa(qu[i][]);
}
} int main(){
int i,j,k;
N=rd(),M=rd();
memset(egh,-,sizeof(egh));memset(qh,-,sizeof(qh));
for(i=;i<=N;i++) v[i]=rd();
for(i=;i<N;i++){
int a=rd(),b=rd();
adeg(a,b);adeg(b,a);
}for(i=;i<=M;i++){
int a=rd(),b=rd();
if(a==){
int c=rd();adq(b,c,i<<);adq(c,b,i<<|);
op[i][]=b,op[i][]=c;
}else op[i][]=b;
}for(i=;i<=N;i++) fa[i]=i;
dep[]=;tarjan();//printf("ll");
for(i=;i<=N;i++){
add(dep[i],v[i]);add(dep[i]+,-v[i]);
}
for(i=;i<=M;i++){
if(op[i][]){
add(dep[op[i][]],);add(dep[op[i][]]+,-);
if(op[i][]!=op[i][]) add(dep[op[i][]]+,),add(dep[op[i][]]+,-);
if(op[i][]!=op[i][]) add(dep[op[i][]]+,),add(dep[op[i][]]+,-);
}else{
if(op[i][]>L) printf("0\n");
else printf("%lld\n",query(op[i][]));
}
} return ;
}

suoi08 一收一行破 (tarjanLca+树状数组)的更多相关文章

  1. 【树状数组】【P2345】 奶牛集会

    传送门 Description 约翰的\(N\)头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在 ...

  2. 【P1972】HH的项链——树状数组+询问离线

    (题面摘自luogu) 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集 ...

  3. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  4. BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  5. 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序

    3881: [Coci2015]Divljak Time Limit: 20 Sec  Memory Limit: 768 MBSubmit: 508  Solved: 158[Submit][Sta ...

  6. 【BZOJ-1103】大都市meg 树状数组 + DFS序

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2009  Solved: 1056[Submit][Sta ...

  7. 【BZOJ-4548&3658】小奇的糖果&Jabberwocky 双向链表 + 树状数组

    4548: 小奇的糖果 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 103  Solved: 47[Submit][Status][Discuss] ...

  8. HD1556Color the ball(树状数组)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. nyoj116_士兵杀敌(二)_树状数组

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...

随机推荐

  1. Nancy异步用法

    个人笔记,记录Nancy异步用法 基类,所有请求都将首先执行该类,并执行Before事件 namespace CxyAdvert.Base { public class BaseNancyModel ...

  2. cmd命令入门

    第一类: 介绍原生的DOS 首先在cmd命令输入help,看到如下图的结果,这里展示的原生的DOS命令. 这里列出了一些命令,可以自己试试的玩.一般看到一个命令后,如果没有说明文档,你就尝试的在其命令 ...

  3. MATLAB找不到遗传算法工具箱,用不了gatool命令的解决方案

    解决方案 官方解释如下: gatool was removed as of R2015b. Use optimtool 在MATLAB R2015b前的版本可以使用gatool调用遗传算法工具箱,我测 ...

  4. centos6.5虚拟机安装后,没有iptables配置文件

    openstack环境里安装centos6.5系统的虚拟机,安装好后,发现没有/etc/syscofig/iptables防火墙配置文件. 解决办法如下: [root@kvm-server005 ~] ...

  5. Individual P1: Summary

    经过5个小时成功把simple mode写差不多了..orz 也是蛮拼的. 开始毫无头绪,本能地开始从度娘搜索‘c# 单词统计’= =看了两段代码也算是见过c#的人了.差不多花了我1小时的时间. 然后 ...

  6. pandas的to_csv()使用细节和一些参数

    dt.to_csv('C:/Users/think/Desktop/Result.csv',sep='?')#使用?分隔需要保存的数据,如果不写,默认是, dt.to_csv('C:/Users/th ...

  7. Java面向对象(Eclipse高级、类与接口作为参数返回值)

      面向对象 今日内容介绍 u Eclipse常用快捷键操作 u Eclipse文档注释导出帮助文档 u Eclipse项目的jar包导出与使用jar包 u 不同修饰符混合使用细节 u 辨析何时定义变 ...

  8. shell脚本--文件测试

    文件测试是指测试某一个文件或者目录是否存在 测试文件格式[ 操作符 目录或者文件 ]    注意左括号和操作符之间有一个空格,文件或者目录 与右边的括号之间也有一个空格. -d 测试是否为目录 -e ...

  9. liuyan

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. [安全]appscan 使用代理抓取其他客户端的请求

    自己安全测试技能很低, 上级给的安全测试的任务给了自动化组的同事来做, 自己之前使用appscan的时候 只知道使用appscan的内置浏览器测试抓取请求 今天与自动化美女同事沟通发现有一个代理的功能 ...