DTOJ 4689. 夕张的改造

题意

提督们惊奇地发现,2019 年实装的改造非常少。

经调查,原来是改造厂的厂长于八日克扣了其他舰娘改造的图纸,并且在 2020 年的第一个月利用这些图纸进行了华丽的改造,一共有三种形态,于八日改二,于八日改二特,于八日改二丁,对空、对陆、对潜、开幕雷、五装备格,无所不能。镇守府雪菜八万钢惨遭退役。

舰娘的结构可以看成一棵 n n n 个点的树,点编号为 0 ∼ n − 1 0 \sim n − 1 0n1 。使用一张图纸可以把树中的某一条边去掉,再加上一条边,使得它依然是一棵树。

现在,于八日想在 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 14), f i = 0 f_i = 0 fi=0
对于前 30 % 30 \% 30% 的数据 (测试点 1 ∼ 6 1 \sim 6 16), n ≤ 5 n \le 5 n5
对于测试点 1 ∼ 20 1 \sim 20 120,满足 1 ≤ n ≤ 50 1 \le n \le 50 1n50
对于所有数据,满足 1 ≤ n ≤ 5000 , 0 ≤ k ≤ n 1 \le n \le 5000 , 0 \le k \le n 1n5000,0kn。(这是 (不) 可以做的!!!

题解

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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值