P3047 [USACO12FEB] Nearby Cows 题解
true
Nearby Cows
USACO 2012 February Gold
提高+ /省选-
#3498db
- Luogu P3047
简述一下题意,题目要求我们对于每一个点求出距离其不超过 $k$ 的点的点权和。
操作很简单,我们只需要开一个DP数组,记录下来每一个点与其距离为 $j \in \{ j|[0,k] \}$ 的点权和即可。
首先我们DFS一遍,记录下来每一个点子树中与其距离为 $j \in \{ j|[0,k] \}$ 的点权和:
1 | void dfs1(int p, int fa) |
然后考虑其祖先节点对其的影响。
我们通过再一次的DFS来统计影响,所以我们只需要计算该节点的父亲对其的影响即可。
举个例子:
我们现在节点 $x$ 统计答案,其父亲为 $y$。
对于每一个与 $y$ 相距 $j \in \{ j|[0,k-1] \}$ 的节点,其与 $x$ 的距离为 $j+1$。
根据这个我们可以统计出 $y$ 对 $x$ 的影响,然后就可以得到答案了。
1 | void dfs2(int p, int fa) |
代码如下:
1 |
|