调了恒久突然发现输出优化忘记带负号了..

就是差分树状数组维护Dfs序即可。

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define LL long long
using namespace std; inline void Get_Int(LL &x)
{
x=; char ch=getchar(); LL f=;
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();} x*=f;
}
inline void Put_Int(LL x)
{
char ch[]; LL top=;
if (x<) putchar('-'),x=-x;
if (x==) ch[++top]='';
while (x) ch[++top]=x%+'',x/=;
while (top) putchar(ch[top--]); putchar('\n');
}
//=============================================
const LL Maxn=;
LL Begin[Maxn],End[Maxn],c[Maxn],cv[Maxn],a[Maxn];
LL head[Maxn],dep[Maxn];
bool vis[Maxn];
LL u,v,w,n,m,Type,cnt,tot;
struct Edge{LL to,next;}edge[Maxn<<];
inline LL lowbit(LL x) {return x&(-x);}
struct BIT
{
LL c[Maxn];
inline void Add(LL x,LL v) {for (LL i=x;i<=n;i+=lowbit(i)) c[i]+=v;}
inline LL Sum(LL x) {LL ret=; for (LL i=x;i;i-=lowbit(i)) ret+=c[i]; return ret;}
inline void Interval(LL x,LL y,LL w) {Add(x,w),Add(y+,-w);}
}Bit1,Bit2;
inline void AddE(LL u,LL v)
{edge[cnt].to=v;edge[cnt].next=head[u];head[u]=cnt++;} void Dfs(LL u)
{
Begin[u]=++tot; vis[u]=true;
for (LL i=head[u];i!=-;i=edge[i].next)
if (!vis[edge[i].to])
dep[edge[i].to]=dep[u]+,Dfs(edge[i].to);
End[u]=tot;
} inline void Modify_Point()
{Get_Int(u),Get_Int(w);Bit1.Interval(Begin[u],End[u],w);}
inline void Modify_Tree()
{Get_Int(u),Get_Int(w);Bit1.Interval(Begin[u],End[u],(-dep[u])*w);Bit2.Interval(Begin[u],End[u],w);}
inline LL Query()
{Get_Int(u);return Bit1.Sum(Begin[u])+Bit2.Sum(Begin[u])*dep[u];} int main()
{
Get_Int(n),Get_Int(m);
for (LL i=;i<=n;i++) Get_Int(a[i]);
memset(head,-,sizeof(head)); tot=;
for (LL i=;i<n;i++)
Get_Int(u),Get_Int(v),AddE(u,v),AddE(v,u);
memset(vis,false,sizeof(vis)); Dfs();
for (LL i=;i<=n;i++) Bit1.Interval(Begin[i],End[i],a[i]);
for (LL i=;i<=m;i++)
{
Get_Int(Type);
if (Type==) Modify_Point();
if (Type==) Modify_Tree();
if (Type==) Put_Int(Query());
}
return ;
}

C++

BZOJ 4034 BIT & Dfs序的更多相关文章

  1. [BZOJ 2819]NIM(dfs序维护树上xor值)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2819 分析: 树上的nim游戏,关键就是要判断树上的一条链的异或值是否为0 这个题目有 ...

  2. BZOJ 3083: 遥远的国度 dfs序,树链剖分,倍增

    今天再做一天树的题目,明天要开始专攻图论了.做图论十几天之后再把字符串搞搞,区域赛前再把计几看看. 3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 128 ...

  3. BZOJ 2819: Nim dfs序维护树状数组,倍增

    1.随机选两个堆v,u,询问若在v到u间的路径上的石子堆中玩Nim游戏,是否有必胜策略,如果有,vfleaking将会考虑将这些石子堆作为初始局面之一,用来坑玩家.2.把堆v中的石子数变为k. 分析: ...

  4. BZOJ 1103 大都市(dfs序+树状数组)

    应该是一道很水的题吧... 显然可以用树链剖分解决这个问题,虽然不知道多一个log会不会T.但是由于问题的特殊性. 每次修改都是将边权为1的边修改为0,且询问的是点i到根节点的路径长度. 令点i到根节 ...

  5. BZOJ 4154 kd-tree dfs序 + 二维空间的区间(矩阵)更新单点查找

    一开始没思路 感觉像是一个树形dp 然而不会 然后看了一眼题解就明白了 一个点的子树 用dfs序表示肯定是一个连续的区间 并且由于有子树的距离限制 可以转化为一个深度的区间 于是每个点都会有一个在二维 ...

  6. BZOJ 3653: 谈笑风生(DFS序+可持久化线段树)

    首先嘛,还是太弱了,想了好久QAQ 然后,这道题么,明显就是求sigma(size[x]) (x是y的儿子且层树小于k) 然后就可以发现:把前n个节点按深度建可持久化线段树,就能用前缀和维护了 其实不 ...

  7. BZOJ 2238: Mst DFS序+KDtree

    明明可以用二维数点来做啊,网上为什么都是树剖+线段树呢 ? code: #include <cstdio> #include <cstring> #include <al ...

  8. Bzoj 4034: [HAOI2015]T2 树链剖分,子树问题,dfs序

    4034: [HAOI2015]T2 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1841  Solved: 598[Submit][Status] ...

  9. bzoj 4034(DFS序+线段树)

    这个题多了一个操作难度直线上升,看完题解才会写 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 ...

随机推荐

  1. HDU Machine scheduling

    Machine scheduling Time Limit : 5000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) ...

  2. easyui filter 过滤时间段

    $.extend($.fn.datagrid.defaults.filters, { dateRange: { init: function(container, options){ var c = ...

  3. R----tidyr包介绍学习

    tidyr包:reshape2的替代者,功能更纯粹 tidyr包的应用 tidyr主要提供了一个类似Excel中数据透视表(pivot table)的功能;gather和spread函数将数据在长格式 ...

  4. linux 双网卡实现

    linux实现双网卡,在虚拟机中创建一个新网卡,NAT方式连接,其中eth0设置为连接外网,目前eth0为自动分配状态,所以将代码注释掉了,eth1设置为连接内网.

  5. python_way ,day25 CMDB_models (数据库设计)

    from django.db import models from django.contrib.auth.models import User # Create your models here. ...

  6. 关于jQuery源码分析

    http://www.w3ctech.com/topic/256 jQuery源码剖析(一)——概览&工具方法

  7. 推荐流程设计器http://www.processon.com/

    以前一直用的Rational Rose进行类图,流程设计,最近发现了ProcessOn使用了下,感觉很好用,相比rose 1.有中文说明,rose全专业英文,理解起来比较费劲: 2.直线比较直,ros ...

  8. js中的fadeIn()

    一.fadeIn()淡入,fadeOut()淡出 fadeIn()和fadeOut()括号里边跟执行的时间

  9. 使用rman迁移数据库到异机

    迁移数据库的方法有多种,较为常用的则是使用RMAN来迁移.使用RMAN迁移数据库属于数据库的物理备份与恢复范畴,整个过程中数据库的相关信息是完整地镜像.因此,基于此种方式还原恢复的数据库用于测试会使得 ...

  10. Linux 系统使用之 VMware Tools安装

    Red Hat Enterprise Linux 4系统中安装VMware Tools 1. 必须以ROOT身份进入Linux 2. 进入linux系统,然后按下 CTRL+ALT组合键,进入主操作系 ...