这道题直接设状态不太好做。
我们先设(g[x][i])表示(x)子树内跟它相距不超过(i)的点的点权之和。这个一遍(dfs)就可以搞定。
现在的问题是怎么计算非(x)子树内的贡献(我当时想了好久楞是没想出来呜呜呜)。其实很简单,有了(g)数组的辅助,我们现在可以直接设(f[x][i])表示与(x)相距不超过(i)的点的点权之和。转移方程:
[f[x][i]=f[fa][i-1]-g[x][i-2]+g[x][i]
]
其中(fa)表示(x)的父亲节点。容易知道根节点的(f)数组等于(g)数组,所以我们只要这样递归下去就可以了,其实这题就是一个简单容斥。