[bzoj3522][bzoj4543][POI2014]HOTEL
题解:
比较难的一道题目
首先考虑暴力dp
我们会发现构成这种形状只有三种情况
1.三个点的lca相同
2.两个点lca相同,第三个点是lca的祖先
3.两个点lca相同,第三个点是lca祖先的子树中某点
对于1,2两种情况是比较好解决的
对于第3种情况,我们可以考虑放到lca处或者转折处计算
1.放在lca处计算
f[i][j]表示考虑i这个点,子树中距离i为j的点的个数
g[i][j]表示i的祖先的子树中到i距离为j的个数
不过这样dp的时候,我们需要删除掉当前点的影响
2.放在转折点计算
f[i][j]表示考虑i这个点,子树中距离i为j的点的个数
g[i][j]表示考虑i这个点,其中子树中取两个点,要求满足他们深度相同,并且他们的lca-i的距离+j=他们到lca的距离
那么考虑一下统计答案
1.
2.g[i][0]
3.令y表示x的父亲 f[y][i]*g[x][i+1]+g[y][i+1]*f[x][i]
这样是n^2的 考虑长链剖分优化