ICode9

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

ABC253H(集合幂级数,矩阵树定理)

2022-05-28 23:02:36  阅读:154  来源: 互联网

标签:ABC253H 32 复杂度 矩阵 枚举 幂级数 个数 集合


首先可以将 \(k\gets \min(n-1,k)\),因为 \(n-1\) 次操作后的操作都是无效的。

考虑对森林个数计数然后除以 \(m^k\)。

设 \(f_{i,S}\) 表示点集为 \(S\),边集大小为 \(i\) 的森林个数,这里不考虑加边的顺序,因此 \(k\) 次操作后森林的个数为 \(f_{k,\{1,\ldots ,n\}}k!\)。

考虑转移,设 \(g_{S}\) 表示点集 \(S\) 的生成树个数,每次枚举一颗树 \(T\subset S\),\(f_{i,S}\gets g_{T}f_{i-|T|+1,S\backslash T}\)。

\(g\) 是好求的,枚举集合后矩阵树定理即可,这部分复杂度为 \(O(n^32^n)\)。

\(f\) 的转移其实就是个多一维限制的子集卷积的形式,换一种形式即为:

\[f_{i,U}=\sum_{S \cup T=U,S\cap T=\varnothing,j+|T|=i-1}f_{j,S}g_{T,|T|} \]

定义这种运算为作用于集合幂级数上的单位乘法,将 \(f_i\) 和 \(g\) 视为集合幂级数,那么就可得 \(f_i=g^i\)。

zszz,fmt 是线性变换,类似连通子图计数的方法,定义 \(g_i\) 为 \(\sum_{S}[|S|=i]g_Sx^S\),于是就可以可以在一开始用一次集合或的 fmt 得到 \(\hat{g_i}\),然后过程中暴力枚举进行普通卷积(这里不是复杂度瓶颈),最后进行一次 ifmt 得到答案,这部分的复杂度也是 \(O(n^32^n)\)。

总的复杂度就是 \(O(n^32^n)\)。

(Official Editorial 的 \(O(n^32^n+n3^n)\) 太逊啦!)

标签:ABC253H,32,复杂度,矩阵,枚举,幂级数,个数,集合
来源: https://www.cnblogs.com/tiatto/p/16322429.html

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

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

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

ICode9版权所有