题目链接:BZOJ 3631
题解:从节点x走到节点y经过的所有节点都要放一块糖果,树上两个点之间的路径是唯一的,经过lca(x,y),所以可以差分来做。x 和 y 处 +1,lca(x,y) 和 fa[lca(x,y)] 处 -1,从下到上累加答案即可。又因为一条路径的终点是下一条路径的起点,除了a1和an,其他节点处的糖果数都多算了一次,减掉1;an处不用放糖果,也减掉1;
PS:倍增lca好久没写,写出来一直WA……后来又看了hzwer大神的代码,好棒诶,特地粘过来保存一下
(我的)
(改成hzwer大神的之后)
code
//我的代码(hzwer大神的写在注释里啦)
#include<iostream>
#include<cstdio>
#include<cstring>