差分[差分数组 & 树状差分]
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]每个元素+1x的d[x] +1, 相当于a[root]~a[x]链上的每个节点都+1a=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