题目
n(n<=2e5)个点的无根树,
定义f(u)为满足v<w且w在u到v的路径上的(v,w)的的数量,允许w和u重合或者w和v重合
输出f(1),f(2),...,f(n)的值
思路来源
乱搞ac
题解
赛中直接写了启发式合并过了,
属于是忽略了dfs序可以前缀作差的性质
如果按dfs序建主席树的话,感觉可作差的性质会直观很多
其实这个思路之前做17北航多校hdu6035的时候有用到过,
进入子树时查询一个值,离开子树时查询一个值,
二者作差即为子树内的增量
其实就是枚举w,考虑w对哪些位置有贡献,w是子树树根枚举到的
子树内<w的值x,x到w的路径上直连儿子是v,那么在v这棵子树以外打标记
w子树外<w的值x,那么在w这棵子树以内打标记
打标记即对应区间加,实际打差分标记,左加又减
代码1(dfs序+树状数组)
#include<bits/stdc++.h>
#include<vector>
using

文章介绍了如何使用dfs序和启发式合并的方法计算给定无根树中f(u)的值,强调了利用dfs序的性质简化问题,以及两种实现方式:一种是结合dfs序和树状数组,另一种是启发式合并策略,通过枚举节点对区间进行操作求解结果。
最低0.47元/天 解锁文章
370

被折叠的 条评论
为什么被折叠?



