码迷,mamicode.com
首页 > 其他好文 > 详细

「总结」多项式生成函数例题(4)

时间:2020-02-15 22:01:25      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:总结   log   解决   exp   多项式   test   tps   display   直接   

就是大概做点题:

1.(车万题?)哈德曼的妖怪少女
http://121.17.168.211:8005/contest/275/problem/2
这个题考场上不会复合逆,打表出了小于6的,剩下的部分就可以直接用类似数树的方法用\(exp\)统计了。
然后说一下正解。

其实这个题分两步。
第一步:求出大小为某个数的边双的方案数。
第二步:用类似数树的方法组合各个边双,成为一颗边双树。
对于做过了数树的我来说第二步仅仅是一个套路。
难点在于第一步。
不妨先计算有根边双的数目。
\(b_i\)\(i\)个点的有根边双数目,\(d_i\)\(i\)个点的连通图个数。
设:
\[B(x)=\sum\limits_{i=0}^{+\infty}\frac{b_ix^i}{i!}\]
\[D(x)=\sum\limits_{i=0}^{+\infty}\frac{d_ix^i}{i!}\]
我们枚举根所在的边双的大小。
紧接着统计和这个边双连接的边所作出的贡献。
这个边一端连接着边双,另一侧连接着一个连通图。
设这些边在不考虑边双内部结构情况下连接着\(i\)个点的方案数的生成函数为\(G(x)\)
那么:
\[G(x)=\sum\limits_{i=0}^{+\infty}\frac{(iD(x))^i}{i!}=e^{iD(x)}\]
那么一张无向连通图的方案数的生成函数就是:
\[D(x)=\sum\limits_{i=0}^{+\infty}\frac{b_ie^{iD(x)}x^i}{i!}=B(xe^{D(x)})\]
\(P(x)=xe^{D(x)}\)
那么:
\[D(x)=B(P(x))\]
可以用扩展拉格朗日反演来求我们所需要的\(B\)的某一项!
对这个公式应用扩展拉格朗日反演。
\[b_n=\frac{1}{n}[x^{n-1}]D'(x)\left(\frac{x}{P(x)}\right)^n\]
然后我之前讲过城市规划那个题的另外一种做法,直接求\(ln\)的,可以在我那篇 讲解(3)中找到。
这样的话我们利用\(ln\)\(exp\)就可以在\(nlogn\)的时间内求出所有需要的\(b_i\)
剩下的部分是把这些边双组合起来。
考虑现在是一堆连通块需要联通成为一棵树。
这个方案可以用\(prufer\)序列计数,设连通块个数是\(m\),每个连通块的大小是\(a_i\),那么方案数是:
\[n^{m-2}\prod\limits_{i=1}^{m}a_i=\frac{n^m\prod\limits_{i=1}^{m}a_i}{n^2}\]
这样的话每一个连通块的贡献都是\(na_i\)
我们的有根计数已经算上了\(a_i\),现在给每一项都乘上\(n\)即可,因为有编号所以用\(egf\)
设一个连通块对答案贡献的指数型生成函数是:
\[A(x)=\sum\limits_{i=0}^{+\infty}\frac{b_inx^i}{i!}\]
设大小为\(i\)个点的答案的\(egf\)函数为:\(F(x)\)
那么:
\[F(x)=\sum\limits_{i=0}^{+\infty}\frac{A^i(x)}{i!}=e^{A(x)}\]
这样就简单了。
直接\(exp\)即可。
然后答案就是:
\[ans=\frac{n![x^n]F(x)}{n^2}\]
问题就解决了。

2.大朋友和多叉树
https://www.lydsy.com/JudgeOnline/problem.php?id=3684
这个题就更简单一点了。
然而打个多项式全家桶一晚上就过去了。。。
还是不够熟练啊。
首先发现似乎是\(MTT\),分解一下模数发现虚惊一场。
仍然可以用\(NTT\),原根是7。
然后考虑一颗以根点权为下标的方案的生成函数。
因为只考虑树的形态,所以是\(OGF\)
那么设这个函数为\(G(x)=\sum\limits_{i=0}^{+\infty}a_ix^i\)
有:
\[G(x)=x+\sum\limits_{i\in S}G^i(x)\]
也就是说,一个点要么是叶子,,要么是某个子树,子树的个数是有限制的,加入这个限制就是这个样子了。
变换一下:
\[G(x)-\sum\limits_{i\in S}G^i(x)=x\]
\[F(G(x))=x\]
\[F(x)=x-\sum\limits_{i\in S}x^i\]
这样可以发现\(F(x),G(x)\)互为复合逆。
直接用拉格朗日反演:
\[[x^n]G(x)=\frac{1}{n}[x^{n-1}](\frac{x}{F(x)})^n\]
这样写个全家桶就行了。

「总结」多项式生成函数例题(4)

标签:总结   log   解决   exp   多项式   test   tps   display   直接   

原文地址:https://www.cnblogs.com/Lrefrain/p/12313757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!