大致题意:给你一棵 \(n\) 个点的树,求有多少棵 \(n\) 个点的树与它的边集交大小为 \(k\)

\(n\le 100\)

其实这个题和”数树”很像啊。

\(1\) :考虑 \(matrix-tree\) 定理。

我们直接构造一个完全图,不在原树上的边边权为 \(1\) ,否则边权为 \(x\) ,这样就能求出一个多项式,\(x^k\) 的系数即为答案。

直接重载多项式跑行列式不太行?我们考虑插值计算即可。

复杂度 \(O(n^4)\)

\(2\) :容斥/二项式反演,组合意义。

考虑 \(g_i\) 为所有钦定 \(i\) 条边的方案能造出的树的个数和。

\(f_i\) 为与原树交大小为 \(i\) 的树个数。

\(g_i=\sum f_jC(j,i)\) ,即 \(f_k=\sum g_i (-1)^iC(i,k)\)

考虑 \(g_i\) 怎么算。假设已经钦定了一个大小为 \(t\) 的边集,这些边形成了 \(n-t\) 棵树,令每一棵大小分别为 \(a_1,a_2,…,a_{n-t}\)

则一个经典结论是方案为 \(n^{-2}\prod (a_in)\)

\(\prod a_i\) 的经典组合意义就是在每个连通块选恰好一个点。

所以设计 \(dp_{i,j,0/1}\) 表示子树 \(i\) 内,钦定了 \(j\) 条边,\(i\) 所在联通块是否选了一个点,总方案数。

\(O(n^2)\) 求出,统计答案即可。

原文地址:http://www.cnblogs.com/Sakurajima-Mai/p/16829249.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性