无标号有根仙人掌计数
下面的做法(是个常数有点大的O(nlog2n)\mathcal O(n\log^2 n)O(nlog2n))我只是口胡了一下,没写过,所以可能有错
首先,假设ana_nan表示有nnn个点的无标号有根仙人掌数量,bnb_nbn表示有nnn个点的且这个nnn个点组成若干棵无标号有根仙人掌而这些无标号有根仙人掌的根又串在一起形成一条链的方案数,cnc_ncn表示bnb_nbn定义中的链是回文的且链上有奇数个点的方案数,dnd_ndn表示n+1n+1n+1个点且根只在一个环上的无标号有根仙人掌数
考虑怎么算出bnb_nbn:相当于是在一条链后面接一个无标号有根仙人掌,即bn=an+∑i=1n−1bian−ib_n=a_n+\sum_{i=1}^{n-1}b_ia_{n-i}bn=an+∑i=1n−1bian−i,是个卷积形式。考虑怎么算出cnc_ncn:是一个链上有奇数个点的链两端接上同一个无标号有根仙人掌,即cn=an+∑i=1⌊n−12⌋aicn−2ic_n=a_n+\sum_{i=1}^{\lfloor\frac {n-1}2\rfloor}a_ic_{n-2i}cn=an+∑i=1⌊2n−1⌋aicn−2i,令ai′=[2∣i]ai2a'_i=[2\mid i]a_{\frac i2}ai′=[2∣i]a2i后也是个卷积形式。考虑怎么算出dnd_ndn:环就是把一条链首尾拼接到根上,但是环可以翻转,所以把环数当链数来算的话,对于大部分环,其实算了两遍(顺时针读出来的链算了一遍,逆时针读出来的链算了一遍),为什么说是大部分环呢,因为如果这个环把根节点删去后剩下的链是回文的,那么它正着读反着读是一样的,本来就只算了一次,考虑有多少条链是回文的,发现若链上有奇数个点,则方案数为cnc_ncn,否则链左半边和右半边对称,有[2∣n]bn2[2\mid n]b_{\frac n2}[2∣n]b2n种方案,故dn=bn+cn+[2∣n]bn22d_n=\frac{b_n+c_n+[2\mid n]b_{\frac n2}}{2}dn=2bn+cn+[2∣n]b2n
最麻烦的地方在于算ana_nan,考虑根节点可以在多个环内,并且环与环之间只考虑形态的差异,没有标号之分,所以可以枚举每种形态的环出现了多少次,生成函数写出来就是∑n=1∞anxn=x∏n=1∞∏i=1dn∑j=0∞xnj\sum_{n=1}^{\infin}a_nx^n=x\prod_{n=1}^\infin\prod_{i=1}^{d_n}\sum_{j=0}^\infin{x^{nj}}∑n=1∞anxn=x∏n=1∞∏i=1dn∑j=0∞xnj,等式右边的xxx是多了根节点这个点(注意dnd_ndn的含义是环长为n+1n+1n+1,也就是说环除开根的部分有nnn个点),然后枚举大小为nnn的环的第iii种形态出现了jjj次。考虑化一下这个式子,得∑n=1∞anxn=x∏n=1∞(11−xn)dn\sum_{n=1}^\infin a_nx^n=x\prod_{n=1}^\infin(\frac{1}{1-x^n})^{d_n}∑n=1∞anxn=x∏n=1∞(1−xn1)dn,把等号右边的xxx移过去,再两边ln\lnln,有ln∑n=1∞anxn−1=−∑n=1∞dnln(1−xn)\ln\sum_{n=1}^\infin a_nx^{n-1}=-\sum_{n=1}^\infin{d_n\ln(1-x^n)}ln∑n=1∞anxn−1=−∑n=1∞dnln(1−xn),再两边同时求导得∑n=2∞anxn−2∑n=1∞anxn−1=∑n=1∞ndn∑i=1∞xinin\frac{\sum_{n=2}^\infin{a_nx^{n-2}}}{\sum_{n=1}^\infin{a_nx^{n-1}}}=\sum_{n=1}^\infin{nd_n}\sum_{i=1}^\infin\frac{x^{in}}{in}∑n=1∞anxn−1∑n=2∞anxn−2=∑n=1∞ndn∑i=1∞inxin,那么把等式左边的分母乘到右边去,令ei=∑j∣ijdjie_i=\frac{\sum_{j|i}{jd_j}}{i}ei=i∑j∣ijdj,可以发现eee推出aaa也是卷积形式,而从ddd推到eee直接算就是O(nlogn)\mathcal O(nlogn)O(nlogn)的
综上,用分治NTT维护a,b,c,d,ea,b,c,d,ea,b,c,d,e五个数组,就可以解决这道题了
无标号有根仙人掌计数相关推荐
- 生成函数Euler变换学习笔记(无标号有根树计数)
众所周知,对于有标号计数的指数型生成函数 f(x)f(x)f(x),将其任意地进行无顺序的组合,得到的生成函数是exp(f(x))exp(f(x))exp(f(x)). 而对于无标号计数的这样的组合, ...
- 「学习笔记」无标号生成树计数总结
感觉关于树/图计数是一门博大精深的学问,不知道这辈子有没有搞到足够明白的机会了啊QwQ 一.无标号有根树计数: 基本上是这篇的详细版本. 考虑令fnf_nfn表示n个点的无标号有根树数量,其生成函数 ...
- 【LOJ6569】仙人掌计数
[题目链接] 点击打开链接 [思路要点] 考虑对有根仙人掌的圆方树计数,定义子树大小为子树内圆点的个数. 令子树大小为 i i i 的圆点和方点各有 r i , s i r_i,s_i ri,si ...
- 2019hdu多校第一场H Desert [多项式计数] [仙人掌计数]
首先注意到n个点的仙人掌其实和n个圆点的圆方树是等价的,那么转化为求圆方树的统计会简单一点. 圆方树要满足的性质有以下几条: 1.奇数层为圆点,偶数层为方点,即只存在圆点和方点连的边. 2.圆点下的子 ...
- ca盘显示无证书_CA根证书无法识别
近些年来,越来越多的企业和组织开始建立他们自己的企业 CA,目的是为了增强日益增长.数量众多的基于网络的商业过程安全性.一个企业要建立自己的企业 CA, 必须自签发一张 CA 根证书.根证书用来为员工 ...
- WXHRound#14被虐记
T2:无标号有根仙人掌计数,不会 倒是搞懂了O(n^2log n)无标号无根树计数 先考虑无标号有根树的计数 记dp[k]为当我dp到i时用1~i大小的树可以凑出k的方案数 则每次就拿dp[i]去更新 ...
- [学习笔记]多项式与有标号简单图计数
学了一天的有标号无向图计数真的自闭了- 本篇文章是基于2019WC汪乐平大佬的讲课课件<生成函数,多项式算法与图的计数>编写的. 注意:文中所有生成函数都规定为指数型生成函数(EGF),请 ...
- 树的计数 Prüfer编码与Cayley公式 学习笔记
最近学习了Prüfer编码与Cayley公式,这两个强力的工具一般用于解决树的计数问题.现在博主只能学到浅层的内容,只会用不会证明. 推荐博客:https://blog.csdn.net/moreja ...
- 【XSY4375】永无乡(二元GF)
以下 "二叉树" 均默认为有根无标号但区分左右儿子的二叉树. 设 h n , k h_{n,k} hn,k 表示 n , k n,k n,k 的答案,有: h n , k = ∑ ...
最新文章
- java别踩白块_java别踩白块(基础功能)
- optee的RPC流程的代码详解
- 小波的秘密5_多分辨率分析和连续小波变换2
- 桌面支持--打印机任务取消不了
- ReactiveCocoa 更优雅的编程(信号探秘)
- 网站的iphone版快开发完了
- 怎么下载完整的python_怎么下载python并安装
- (转)jquery基础教程七 选择器(selectors 的xpath语法应用)
- 请投量子位一票 | 2018年度明星学术公众号评选
- P1160 队列安排 (模拟链表)
- Win10桌面背景(壁纸)导出工具
- 计算机图形学 dda,计算机图形DDA算法
- Codesys + BeagleBone PLC控制达到小儿科水平
- Oracle锁表会影响查询效率么,oracle锁表查询,资源占用,连接会话,低效SQL等性能检查...
- 谷歌浏览器 发送到剪切板_将Google搜索结果发送到您的新闻阅读器
- 计算机专业就业方向与前景以及你所要具备的技能(本科生)
- FLV.js播放报错,及浏览器播放flv缓存内存不足导致黑屏
- 处女作真人语音计算器上线了
- 烽火华为4.2 亿元联合中标武汉地铁云....
- 高斯投影坐标正反算算法(python)