luogu P3047 [USACO12FEB]Nearby Cows G

这道题直接设状态不太好做。

我们先设\(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\)数组,所以我们只要这样递归下去就可以了,其实这题就是一个简单容斥。

posted @ 2020-06-04 20:22  With_penguin  阅读(113)  评论(0编辑  收藏  举报