仓鼠的石子游戏
直接转载,点此看博客
乃爱与城市拥挤程度
一、题目
二、解法
本题的暴力分还是给的很足的,乱搞都可以拿到60分。
正解考虑树形 d p dp dp,定义 f [ i ] [ j ] f[i][j] f[i][j]为 i i i点的子树内距离不大于 j j j的点数, g [ i ] [ j ] g[i][j] g[i][j]为子树拥挤度乘积。
先从上到下做一遍,转移为:
{ f [ i ] [ j ] = ∑ f [ k ] [ j − 1 ] ( k 是 i 的 子 节 点 ) g [ i ] [ j ] = ∏ g [ k ] [ j − 1 ] × f [ i ] [ j ] ( k 是 i 的 子 节 点 ) \begin{cases} f[i][j]=\sum f[k][j-1] & (k是i的子节点)\\ g[i][j]=\prod g[k][j-1] \times f[i][j] & (k是i的子节点) \end{cases} {
f[i][j]=∑f[k][j−1]g[i][j]=∏g[k][j−1]×f[i][j](k是i的子节点)(k是i的子节点)
老套路,还要跑一遍 d p dp dp拿到子树外的拥挤度乘积,详见代码,不展开。
#include <cstdio>
#define int long long
const int MAXN = 100005;
const int MOD = 1e9+7;
int read()
{
int x=0,flag=1;char c;
while