Brief Description

您需要设计一种数据结构支持以下操作:

  1. 把某个节点 x 的点权增加 a 。
  2. 把某个节点 x 为根的子树中所有点的点权都增加 a 。
  3. 询问某个节点 x 到根的路径中所有点的点权和。

Algorithm Design

我们考察操作对于查询的贡献。

对于操作1,如果节点y是节点x的后代,那么可以贡献\(a\)

对于操作2,如果节点y是节点x的后代,那么可以贡献\(a*(dep_y-dep_x+1)\)

我们可以使用两个树状数组来维护贡献。

Code

#include <cstdio>
#define lowbit(i) (i) & -(i)
const int maxn = 101000;
#define ll long long
ll bit[2][maxn];
ll n, m, cnt = 0;
void change(ll id, ll pos, ll val) {
for (ll i = pos; i <= n; i += lowbit(i)) {
bit[id][i] += val;
}
}
ll query(ll id, ll pos) {
ll ans = 0;
for (ll i = pos; i; i -= lowbit(i)) {
ans += bit[id][i];
}
return ans;
}
struct edge {
ll to, next;
} e[maxn << 1];
ll l[maxn], r[maxn], dfn = 0, val[maxn], deep[maxn], head[maxn], q[maxn];
void add(ll x, ll y) {
e[++cnt].to = y;
e[cnt].next = head[x];
head[x] = cnt;
}
void add_edge(ll x, ll y) {
add(x, y);
add(y, x);
}
void dfs(ll x, ll fa) {
l[x] = ++dfn;
q[dfn] = x;
for (ll i = head[x]; i; i = e[i].next) {
if (e[i].to != fa) {
deep[e[i].to] = deep[x] + 1;
dfs(e[i].to, x);
}
}
r[x] = dfn;
}
int main() {
// freopen("haoi2015_t2.in", "r", stdin);
// freopen("haoi2015_t2.out", "w", stdout);
scanf("%lld %lld", &n, &m);
for (ll i = 1; i <= n; i++) {
scanf("%lld", &val[i]);
}
for (ll i = 1; i < n; i++) {
ll x;
ll y;
scanf("%lld %lld", &x, &y);
add_edge(x, y);
}
dfs(1, 0);
for (ll i = 1; i <= n; i++) {
change(1, l[i], val[i]);
change(1, r[i] + 1, -val[i]);
}
while (m--) {
ll opt, x, y;
scanf("%lld %lld", &opt, &x);
if (opt == 1) {
scanf("%lld", &y);
change(1, l[x], y);
change(1, r[x] + 1, -y);
}
if (opt == 2) {
scanf("%lld", &y);
change(0, l[x], y);
change(1, l[x], -deep[x] * y + y);
change(0, r[x] + 1, -y);
change(1, r[x] + 1, deep[x] * y - y);
}
if (opt == 3) {
printf("%lld\n", query(0, l[x]) * deep[x] + query(1, l[x]));
}
}
}

[bzoj4034][HAOI2015]树上操作——树状数组+dfs序的更多相关文章

  1. 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序

    [题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...

  2. bzoj4034[HAOI2015]树上操作 树链剖分+线段树

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

  3. bzoj4034: [HAOI2015]树上操作(树剖)

    4034: [HAOI2015]树上操作 题目:传送门 题解: 树剖裸题: 麻烦一点的就只有子树修改(其实一点也不),因为子树编号连续啊,直接改段(记录编号最小和最大) 开个long long 水模版 ...

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

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

  5. 【BZOJ3653】谈笑风生 离线+树状数组+DFS序

    [BZOJ3653]谈笑风生 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道高明到哪里去了”. ? 设a 和 ...

  6. POJ 3321 Apple Tree (树状数组+dfs序)

    题目链接:http://poj.org/problem?id=3321 给你n个点,n-1条边,1为根节点.给你m条操作,C操作是将x点变反(1变0,0变1),Q操作是询问x节点以及它子树的值之和.初 ...

  7. BZOJ 1103 [POI2007]大都市meg(树状数组+dfs序)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1103 [题目大意] 给出一棵树,每条边的经过代价为1,现在告诉你有些路不需要代价了, ...

  8. [luogu P3787][新创无际夏日公开赛] 冰精冻西瓜 [树状数组][dfs序]

    题目背景 盛夏,冰之妖精琪露诺发现了一大片西瓜地,终于可以吃到美味的冻西瓜啦. 题目描述 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有 ...

  9. BZOJ.2434.[NOI2011]阿狸的打字机(AC自动机 树状数组 DFS序)

    题目链接 首先不需要存储每个字符串,可以将所有输入的字符依次存进Trie树,对于每个'P',记录该串结束的位置在哪,以及当前节点对应的是第几个串(当前串即根节点到当前节点):对于'B',只需向上跳一个 ...

随机推荐

  1. 【C#】 URL Protocol

    [C#] URL Protocol 网页调用本地程序, 支持 Windows 下所有浏览器, 与浏览器插件对比实现简单,但判断是否调用成功时, 只有ie10以上有函数,其他浏览器得自己实现(用 ifr ...

  2. jenkins安全内容配置策略

    有时我们使用HTML Publisher Plugin插件时,在jenkins点开html report,会发现没有带任何的css或js样式,这是因为Jenkins 1.641 / Jenkins 1 ...

  3. 「日常训练」「小专题·USACO」 Barn Repair(1-4)

    题意 之后补. 分析 这题同样也很精巧.我们不妨思考一下,如果只允许用一块木板,那么要购买多少距离?是整个的距离吗?不是,是从第一个到最后一个(哈哈哈哈哈哈哈).但是,不包括第一个的"左边& ...

  4. 去西交大考PAT认证

    这周六去了西交大去考浙大PAT认证,为什么要写这个博客呢.因为...我不是西交大的学生,找考场就花了我很多时间,各种搜都找不到PAT的考场在哪. 在此记录一下,希望有有缘人再去西交大考试,可以少走点弯 ...

  5. 在easyUI开发中,出现jquery.easyui.min.js函数库问题

    easyUI是jquery的一个插件,是民间的插件.easyUI使用起来很方便,里面有网页制作的最重要的三大方块:javascript代码.html代码和Css样式.我们在导入easyUI库后,可以直 ...

  6. asp.net应用程序脱机app_offline.htm文件

    This application is currently offline. To enable the application, remove the app_offline.htm file fr ...

  7. JAVA-I/O流任务

    作业地址 5. Scanner基本概念组装对象 编写public static List readStudents(String fileName)从fileName指定的文本文件中读取所有学生,并将 ...

  8. 个人作业4——alpha阶段个人总结(201521123103 吴雅娟)

    一.个人总结 在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程: 请用自我评价表:http://www.cnblogs.com/xinz/p/3852177.html 有 ...

  9. grpc deadlines

    最近在将应用的rpc更换为grpc,使用过程中,发现报“rpc error:code=DeadlineExceeded desc = context deadline exceeded”,这是啥?原来 ...

  10. 【bzoj4548】小奇的糖果 STL-set+树状数组

    题目描述 平面上有n个点,每个点有一种颜色.对于某一条线段,选择所有其上方或下方的点.求:在不包含所有颜色的点的前提下,选择的点数最多是多少.(本题中如果存在某颜色没有相应的点,那么选择任何线段都不算 ...