题意
给出一棵 n n n 个点的树,每个点有点权 v i v_i vi,选出 m m m 个不相邻的点,代价为这 m m m 个点的权值之积。求所有合法方案的代价和,对 998244353 998244353 998244353 取模。
n , m ≤ 8 × 1 0 4 , v i < 998244353 n,m\le 8\times 10^4,v_i <998244353 n,m≤8×104,vi<998244353。
分析
令 d p 0 , u , j dp_{0,u,j} dp0,u,j 表示来到节点 u u u,不选节点 u u u,总共选了 j j j 个点的代价和; d p 1 , u , j dp_{1,u,j} dp1,u,j 表示来到节点 u u u,选了节点 u u u,总共选了 j j j 个点的代价和。容易看出转移是个树形背包,可以在 O ( n 2 ) O(n^2) O(n2) 内转移。
进一步的,我们发现转移是个卷积操作,于是令 d p 0 , u dp_{0,u} dp0,u 表示来到节点 u u u,不选节点 u u u 的生成函数, d p 1 , u dp_{1,u} dp1,u 表示来到节点 u u u,选了节点 u u u 的生成函数,于是有以下转移:
d p 0 , u = ∏ ( u , v ) ( d p 0 , v + d p 1 , v ) d p 1 , u = ( v u x ) ( ∏ ( u , v ) d p 0 , v ) dp_{0,u}=\prod\limits_{(u,v)}(dp_{0,v}+dp_{1,v})\\ dp_{1,u}=(v_u x)(\prod\limits_{(u,v)}dp_{0,v}) dp0,u=(u,v)∏(dp0,v+dp1,v)dp1,u=(vux)((u,v)