思路:
差分其实是个自己随便创造的东西啊~
差分(这里的小差分):
比如你要算一棵树上 u->v 路径上的次数, v是 u 子树上的一个点,
算一棵树上 u->v 路径上的次数 在这了是算u -> v路径上除了 v 的 每个节点的次数,
对于每一对u, v (u -> v)的,用C[i]计数,可以C[fa[ u ]]–, C[fa[ v ]]++ (fa[i] 是 i 的前驱节点), 然后跑一下DFS,统计次数,具体处理就是对于每个节点去加上他的所有子节点的次数,然后就会发现就这么搞好了。。
树上倍增:
福利:真讲的超级棒!!!
处理完倍增以后,就是每次找一个能“跳”的最远位置!
对于第一次应用倍增和差分,真是感觉非常...爽啊...
要多刷一波倍增的题了!!!
代码参考自:http://blog.csdn.net/cabinfever/article/details/53325717