题意
提督们惊奇地发现,2019 年实装的改造非常少。
经调查,原来是改造厂的厂长于八日克扣了其他舰娘改造的图纸,并且在 2020 年的第一个月利用这些图纸进行了华丽的改造,一共有三种形态,于八日改二,于八日改二特,于八日改二丁,对空、对陆、对潜、开幕雷、五装备格,无所不能。镇守府雪菜八万钢惨遭退役。
舰娘的结构可以看成一棵 n n n 个点的树,点编号为 0 ∼ n − 1 0 \sim n − 1 0∼n−1 。使用一张图纸可以把树中的某一条边去掉,再加上一条边,使得它依然是一棵树。
现在,于八日想在 2020 年继续拿走别的舰娘的图纸对自己进行改造,她一共拿走了 k k k 张图纸。她想知道,自己经过接下来的改造之后,总共会有多少种形态。两个形态不同,表示有一条边 ( x , y ) (x, y) (x,y) 在第一棵树中出现,在另一棵树中不出现。
本题共
20
20
20 个测试点。
其中有
20
%
20 \%
20% 的数据,
k
=
0
k = 0
k=0。
其中测试点
1
1
1,
k
=
0
k = 0
k=0。
对于前
20
%
20 \%
20% 的数据 (测试点
1
∼
4
1 \sim 4
1∼4),
f
i
=
0
f_i = 0
fi=0。
对于前
30
%
30 \%
30% 的数据 (测试点
1
∼
6
1 \sim 6
1∼6),
n
≤
5
n \le 5
n≤5。
对于测试点
1
∼
20
1 \sim 20
1∼20,满足
1
≤
n
≤
50
1 \le n \le 50
1≤n≤50。
对于所有数据,满足
1
≤
n
≤
5000
,
0
≤
k
≤
n
1 \le n \le 5000 , 0 \le k \le n
1≤n≤5000,0≤k≤n。(这是 (不) 可以做的!!!)
题解
orzslz暴踩标算。
对于原来题目,考虑用矩阵树求出在原树中恰好选 k k k条边的方案数,把原树中的边权设为 x x x,做一遍矩阵树后得到的是一个关于 x x x的多项式,要求出里面每一项的系数,带入 n n n个 x x x的值进去即可,效率 O ( n 4 ) O(n^4) O(n4)。
生成树计数还可以考虑 p r u f e r prufer prufer计数(一般比起矩阵树效率更优),本题要求的是最多 k k k条边不在原生成树上的生成树个数。考虑先在原生成树中拆掉 x x x条边,把得到的 x + 1 x+1 x+1个连通块乱连(用 p r u f e r prufer prufer计数),这样就是至多有 x x x条边不在原生成树上的方案数,但由于 < x <x <x的方案在这里会被重复计算,这个并不是最终的答案,容斥一下即可。
剩下问题在于求把原生成树分为 x x x个连通块,每个连通块的 s z sz sz之积的和。直接树形DP设 f [ u ] [ i ] [ j ] f[u][i][j] f[u][i][j]为把 u u u分为 i i i个连通块, u u u所在的连通大小为 j j j的所有方案 s z sz sz积的和,效率是 O ( n 3 ) O(n^3) O(n3)的。考虑优化状态,只有最后一位可以去掉,但这样转移时关于根所在的连通块贡献无法计算,不妨再设一个 g [ u ] [ i ] g[u][i] g[u][i]表示不考虑根所在连通块的情况,那么在合并的时候, f f f就可以由 f f f和 g g g转移过来了,效率 O ( n 2 ) O(n^2) O(n2)。