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