专栏文章
题解:P14509 树上求值 tree
P14509题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @min79s1z
- 此快照首次捕获于
- 2025/12/01 21:43 3 个月前
- 此快照最后确认于
- 2025/12/01 21:43 3 个月前
这题感觉比较套路,但场上想了 min 开始写然后因为代码能力太差又花了一个半小时还是太菜了。
下文中定义 为 及其子树中点构成的集合。
注意到 容易用 Trie 树整体计算,并且 这样的式子里的 (节点深度)在 dfs 过程中每步只会加减一,容易联想到 Trie 树全局加减,因此尝试往 Trie 这个方向想。
我们发现,一个节点的 值可以按如下方式划分(黄点为根,红点为当前点):

红点(编号为 )的 值即可表示为 。
这个过程类似于换根,因此,我们考虑在遍历原树的时候维护每棵子树中每个点(称这个点为 )的 的值构成的 Trie(每个点对应的 Trie 树由孩子节点的 Trie 树全局减一然后合并,再插入自己得来),然后记录每个点的 以及 的结果,最后我们就可以再跑一次 dfs 记录从根出发路径上的信息和得到每个点的 值。
考虑到 Trie 树的插入、合并和全局减操作,每组数据时间复杂度均为 。由于我赛时脑子坏了 Trie 树写启发式合并导致代码略为繁琐且时间复杂度较高(多带了一个 但是卡常卡过去了),因此不再展示。
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...