树上差分空间开不下怎么办

written on 2022-07-27

在做模拟赛时,碰到天天爱跑步这道题,本来已经有了正解的思路了,也想到了树上差分,但是苦于空间问题,因此这个思路被鸽了。

这篇博客总结一下相关的技巧。

树上差分空间开不下的话,可以采用 vector<pair<int,int> > 的形式来存储差分的相关信息,然后开一个 \(O(n)\) 的桶,在从子树向上转移时,将差分 \(\tt{vector}\) 的信息加入这个桶。

那么如何对于某一个节点统计答案呢?对于这个问题,我们可以在向下递归子树之前减去原值,之后再加上桶的答案。这样的话,就相当于对子树做了一个求和的操作,将差分的信息转化为了原信息,做到了在空间满足情况下的统计。

总时间复杂度约为 \(O(n+m)\)

这种方法代表了人类的变通智慧,需要熟练掌握。

posted @ 2022-07-31 22:34  Freshair_qprt  阅读(24)  评论(0编辑  收藏  举报