ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【UR #20】跳蚤电话

2021-04-05 10:01:22  阅读:250  来源: 互联网

标签:子树 20 limits UR 一个点 跳蚤 root 虚树 size


题意

uoj

做法

第一次打uoj比赛,居然有签到题,体验良好qwq

容易观察到,一个点一旦加入\(S\)就不会再出来,且边形成了一个虚树。
任意时刻,操作为在虚树中的某条边中间选取一个点加进来,或在外面选取一个点,与虚树的一个叶子连边。

自然的,会想到对于一棵树,目前\(S=\{root\}\),枚举一个点\(x\),那么路径\(\text{root-x}\)中间的点可以随意选取顺序:假设中间除\(x,root\)有\(m\)个点,这部分复杂度为\(m!\)。

断开这些边,对于剩下若干棵树,即可转化为子问题。
有本质不同\(O(n)\)个子问题,这样能做到\(O(n^3)\)或\(O(n^2)\)。

这题性质非常好:对于根节点\(root\),假设其有若干子树,那么若干子树都是分别独立的。

那么令\(f_i\)为单独考虑\(i\)子树,初始\(S=\{i\}\)的方案数。
递归解决这个问题,但现在,通过\(root\)的若干儿子的\(f_i\)直接得到\(f_{root}\)是无法做到的,因为儿子进入这个集合的时间未知。

额外的,令\(g_i\):在\(i\)子树的基础上,\(i\)上面加入一个点(即钦定\(i\)有父亲节点),\(S\)初始为\(fa_i\),的方案数。

因为如果我们得到了\(g_i\),那么可以通过\(root\)儿子节点的\(g_{v_i}\),很容易得到\(f_{root}\)。

考虑得到\(g_u\),两种情况
(1)\(fa_u\)第一次就选取了\(u\),此时方案数为\(f_u\)
(2)\(fa_{u}\)一开始延伸到了\(u\)的某个子树,这种情况较为复杂。

假设\(u\)的儿子分别为\(\{v_1,\ldots,v_m\}\),令\(size_i\)为\(i\)子树大小。
当\(S\)延伸到了\(v_i\),在\(S\)子树加入\(u\)前,\(S\)不会延伸到其他子树,而且在加入\(u\)后,\(u\)的儿子就相互独立了,枚举\(u\)加入的时间:

\[\begin{aligned} &\sum\limits_{j=2}^{size_{v_i}+1}{size_u-j\choose{size_{v_1},...,size_{v_i}-(j-1),...,size_{v_m}}}\prod\limits_{k=1}^m g_{v_k}\\ &=(\prod\limits_{k=1}^m g_{v_k})(\prod\limits_{k\neq i}\frac{1}{(size_{v_k})!})(\sum\limits_{j=2}^{size_{v_i}+1}\frac{(size_u-j)!}{(size_{v_i}-j+1)!})\\ \end{aligned}\]

最后那个和式,是经典组合数上指标求和,很容易得到封闭形式。

标签:子树,20,limits,UR,一个点,跳蚤,root,虚树,size
来源: https://www.cnblogs.com/Grice/p/14617849.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有