差分[差分数组 & 树状差分]
2021-01-25 19:13
标签:amp 距离 父亲节 img 父节点 糖果 -- 餐厅 个性 显然通过求前缀和可以做到单点查询 他高效的地方在于区间修改,比如我们对区间 [1,2]仍不变, [2,4]的前缀和都加了5, 4以后的话+5,-5相抵消, 还是不变的 因此差分数组能够高效的解决区间修改单点查询的问题。 树的以下两个性质: 如果假设我们要考虑的是从 如果题目要求对树上的一段路径进行操作,并询问某个点或某条边被经过的次数,树上差分就可以派上用场了。 设原数组为 如果给树上的一个节点 假设 但这样链 例题:松鼠的新家( 用 思路 最小的长度, 肯定在 0 - maxl(最长的那条道路) 之间, 我们可以用二分在 0-maxl枚举, 每次枚举统计长度超过mid的路径的条数cnt, 找到一条被经过了cnt次的边(这条边可以影响所有长度超过mid的路径), 把符合条件的边中最长的那一条归零, 如果cnt条路径中最长的减去这条边权
差分[差分数组 & 树状差分] 标签:amp 距离 父亲节 img 父节点 糖果 -- 餐厅 个性 原文地址:https://www.cnblogs.com/hzoi-poozhai/p/12859765.html差分[差分数组 & 树状差分]
差分数组
原数组 ai
9
4
7
5
9
差分数组 bi
9
-5
3
-2
4
差分数组的前缀和
9
4
7
5
9
[2,4]
每个元素加上5
,我们只需在差分数组:b2+=5,b5?=5,然后求前缀和即可
原数组 ai
9
4
7
5
9
差分数组 bi
9
0
3
-2
-1
差分数组的前缀和
9
9
12
10
9
树状差分
u
到v
的路径,u
与v
的lca
是a
,,我们将路径拆分成 u->a和
a->v点差分
a
,差分数组为d
。假如给d[i]+1
,其实就相当于给a[i]~a[n]
每个元素+1
x
的d[x] +1
, 相当于a[root]~a[x]
链上的每个节点都+1
a=lca(x,y)
。 把链x~y
分成两个链,x~a
和a~y
。即d[x]+1,d[y]+1
。a~root
增加了2
,我们让d[a]-1
,此时fa[a]~root
变成了-1
,需要d[fa[a]]-1
完美解决。luogu p3258
)
Description
n
个房间,并且有 n-1
根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的。天哪,他居然真的住在“树”上。Input
n
,表示房间个数n
个正整数,依次描述 a1,a2,?,ana1,a2,?,an。n-1
行,每行两个正整数 x,y
,表示标号 x
和 y
的两个房间之间有树枝相连。Output
n
行,第 i
行输出标号为 i
的房间至少需要放多少个糖果,才能让小熊有糖果吃。Input
5
1 4 5 3 2
1 2
2 4
2 3
4 5
output
1
2
1
2
1
#include
边差分
cf[i]
代表从i
到i
的父亲这一条路径经过的次数。令a=lca(u,v)
因为关于边的差分,a
表示a
到其父亲的那条边,不在u~v
路径中,所以cf[u]++,cf[v]++,cf[a]?=2
。
luogu P2680
运输计划
m
条道路,可以使任意一条道路的权值变为0
,怎样使长度最长的道路长度最小。#include
上一篇:Unity 快速定位UI
下一篇:java中的NIO
文章标题:差分[差分数组 & 树状差分]
文章链接:http://soscw.com/index.php/essay/46925.html