树上差分空间开不下怎么办
written on 2022-07-27
在做模拟赛时,碰到天天爱跑步这道题,本来已经有了正解的思路了,也想到了树上差分,但是苦于空间问题,因此这个思路被鸽了。
这篇博客总结一下相关的技巧。
树上差分空间开不下的话,可以采用 vector<pair<int,int> >
的形式来存储差分的相关信息,然后开一个 \(O(n)\) 的桶,在从子树向上转移时,将差分 \(\tt{vector}\) 的信息加入这个桶。
那么如何对于某一个节点统计答案呢?对于这个问题,我们可以在向下递归子树之前减去原值,之后再加上桶的答案。这样的话,就相当于对子树做了一个求和的操作,将差分的信息转化为了原信息,做到了在空间满足情况下的统计。
总时间复杂度约为 \(O(n+m)\)。
这种方法代表了人类的变通智慧,需要熟练掌握。