计数
------ 总结 ------
无向图
1. 有标号
求\(g\)的一种常用方法为\(ln\)(分治fft)
即令\(H, G\)为\(h, g\)的生成函数 , 有\(H = e^{G}, G = ln (H)\)
求\(g\)的另一方法是容斥\(g=h-un\)
一种方法是把\(h(n),g(n)\)放一起, sigma用分治fft
一种方法是把减号移左边, 然后变成多项式求inv
2. notice
如果是任意图, 经过大量打表实验, \(h(n) = F(n) * 2^{\binom n 2}\), \(F(n)\)为与n有关的一个多项式
度数k次方和 原题的价值
总度数\(k\)次方 = \(2^k\) * 总边数k次方
每块点数\(k\)次方和 连在一起的幻想乡 IIII
每块边数\(k\)次方和 连在一起的幻想乡 IIIII
总边数\(k\)次方和xsy 1538 - 连在一起的幻想乡I II III
有向图, \(2^{\binom n 2}\)变成\(2^{n(n-1)}\)就好了
树
1. 有标号
关于prufer码 :
每次找出编号最小的叶子节点,写下与它相邻的节点的编号,然后删掉这个叶子节点。反复执行这个操作直到只剩两个节点为止(此时无法确定叶子)
反过来, 对于一个prufer码, 从前往后, 对于码的第\(i\)位,我们可以每次找到当前最小的未选节点, 将其和第\(i\)位连接. 最后剩下两个未选, 连起来
这样prufer码和树一一对应
于是\(n\)个点的无根树有\(n^{n-2}\)种, 有根树有\(n*n^{n-2} = n^{n-1}\)种
设每个点\(i\)的度数为\(d_i\), 当\(d_i>1\)时, 会被其他点加入prufer码, 于是第\(i\)个点在恰出现\(d_i-1\)次
多项式系数$$\binom{n-2}{d_1-1,d_2-1,\cdots, d_{n}-1}$$
*2. 无标号
3. notice
有标号时 : 有根树 = 无根树 * 可选根集大小
二叉树
1. 有标号
相比普通的树 , 此时有了强行的左右之分, 叶子间不是无序的
(行吧 感觉还是要看出题人)
2. 无标号
\(\Leftrightarrow\)长度2n括号序列 \(\Longleftrightarrow\)卡特兰数第\(n\)项 = \(\frac{\binom{2n}{n}}{n+1}\)
*毛毛虫
二分图
记\(h(n)\)为 任意 的 黑白染色 的 二分图
记\(g(n)\)为 连通 的 黑白染色 二分图 计数
记\(h'(n)\)为 任意 的 无色 二分图 计数
记\(g'(n)\)为 连通 的 无色 二分图 计数
\(G = ln (H)\)
\(g' = g/2\)
\(H' = exp (G')\)
另外一种推法:
$H' ^{~2} = H $
为什么呢, 对于二分图的一个连通块, 染色方案只有两种
那么如果一个二分图 有k个连通块, 那么方案有\(2^k\)种
\(H'^{~2}\)会导致无色图算重, 考虑\(k\)个连通块的方案, 它被卷积恰好算重\(2^k\)次
DAG
照样的, 我们先不考虑连通性, 那么
连通图直接ln什么的套路一下就好
考虑\(2^{k(n-k)}\)如何卷积
\(k(n-k)=\frac{n^2- k^2-(n-k)^2}{2}\)
于是$$\frac{h(n)}{n!}2^{\frac {-n2}2}=\sum_{k=1}n \frac {(-1){k-1}}{k!}2{2}} \frac{h(n-k)}{(n-k)!} 2{\frac{-(n-k)2}{2}}$$ (容斥, 枚举出度0节点数)
强连通
\(f(n)\)表示\(n\)个点的强连通森林 计数
\(f'(n)\)表示\(n\)个点的强连通森林中, 奇数个连通块对\(f'\)贡献为正, 偶数个为负 (即放了个容斥系数进去)
\(g(n)\)表示\(n\)个点的连通强连通图 计数
\(h(n)\)表示\(n\)个点的任意图 计数
有标号 - 欧拉图
\(\Leftrightarrow\)所有点的度数均为偶数
我们考虑先删掉与\(1\)相连的\(n-1\)条边
剩下乱连$$2^{\binom {n - 1} 2} $$
乱连之后, 可以唯一确定与\(1\)相连的那\(n-1\)条边的状态 : 与被连接的点的度数相关
但是, 用\(1\)取补全度数后, 会不会导致\(1\)的度数为奇数呢?
不会. 任意图的度数之和为偶数
综上, 有标号欧拉图 总数 为\(2^{\binom {n-1} 2}\)
*平面图
------ Problems ------
任意图 - 有标号
xsy 1729 - 小朋友和二叉树
给定每个节点的可选权值集合(\(val\ge 1\)),求权值和为\(1..m\)的二叉树分别有多少
对可选集合搞一个生成函数\(C\)
\(T=T^2C+1\) (别漏了+1, 因为边界空树\(T_0=1\))
求解二元一次方程
\(T=\frac{1\pm \sqrt{1-4C}}{2C}\)
舍掉一个解, 因为\(T_0 = 1\)
对于减号, 上下都趋于0, 因为\(C(x)\)无常数项, 我们令其为y, 然后洛必达
*xsy 3684 - 大朋友和多叉树
多叉树计数
xsy 1295 - 基环树计数
求\(n\)个点\(n\)条边的带标号图计数, 没有模数
如果有模数可以像下面仙人掌计数那样搞 , 满足只有根是环, 求出有根树再除k就是无根图
这题可以这样
即先枚举环大小, 轮换, 正反向 , 然后乘\(F(n,k)\), n个点k个森林计数
考虑算两次 , \(n\)个点\(k\)个块,说明连了\(n-k\)条边, 考虑连边的方案数\(S\)
\(S=F(n, k) (n-k)!\)
于是$$F(n,k) = n^{n-k} \binom{n-1}{n-k} = n^{n-k} \binom{n-1}{k-1}$$
另一种推法利用prufer
考虑将环上的边都断开, 然后加一个方点在中间, 权值\(\infty\)
此时方点为根, 然后设环大小为\(k\), 然后首先\(\binom{n}{k}\)钦定一个环, 然后把权值设为\(\infty\)
最后\(k\)位一定选择方点
除了最后\(k\)位之外, 剩下的最后一位, 一定填入\(k\)中之一
其他的随便
于是$$ F(n, k)= n^{n-k-1}k\binom n k$$
仙人掌计数
一个无向连通图的任意一条边最多属于一个简单环, 称为仙人掌
我们设\(g(n)\)表示\(n\)个点的有根仙人掌计数
考虑删掉根
(1) 该点连接着一个子树
(2) 该点连接着一个环
这两种情况是或起来的, 对应着乘法分配率
子树的话生成函数是\(G\)
环拆开变成 链+树, 链是有序的, 这里不用exp, 生成函数是$$\sum_{i=2}^\infty \frac {G^i}2 =\frac {G^2}{2-2G}$$
或起来$$G+\frac{G^2}{2-2G} = \frac{2G-G^2}{2-2G}$$
把根连上
对于无根, 我们只需对答案乘\(n\)
对于沙漠计数(仙人掌森林), exp即可
对于求生成树个数期望值, g(n)改为有根仙人掌生成树计数方案
拆长度\(i\)的环的时候有\(i\)种拆法, 其他部分大体不变
*点双计数
点双计数
xsy 1538 - 连在一起的幻想乡 I
求\(n\)个点的无向连通图中: 总边数的平方的和
\(n\le 2000\)
我们记
\(h_k(n)\)为任意n个点的图, 总边数的k次方和
\(g_k(n)\)为任意\(n\)个点的连通图, 边数的\(k\)次方和
xsy 1538 - 连在一起的幻想乡 II
求\(n\)个点的任意无向图中 : 总边数的\(k\)次方和
\(n\le 10^9, k\le 500\)
打表发现 : \(h_k(n)\)是\(n\)的\(2k\)次多项式, 乘上一个\(2^{\binom n 2 -k}\)
于是我们可以\(\Theta(k^3)\)求出\(h_k(1..k)\)
然后先舍弃掉后面n在指数的那个部分, 利用线性插值出解 , 最后再补回n在指数的部分
xsy 1538 - 连在一起的幻想乡 III
好吧我承认这是ypl题..
求\(n\)个点的任意无向图中 : 总边数的\(k\)次方和
\(n\le 10^9, k\le 10^5\)
上面算法的瓶颈是求\(h_k\)的逐步递推, 我们重新考虑
记\(m(s)\)为图\(s\)的边数
\(\Theta(k)\)即可解决问题
xsy 1538 - 连在一起的幻想乡 IIII
求\(n\)个点的任意无向图中 : 每块点数\(k\)次方的和
记\(h(n)\)表示任意图方案数
记\(g(n)\)表示连通图方案数
记\(f(n)\)表示任意图 每块点数\(k\)次方的和
xsy 1538 - 连在一起的幻想乡 IIIII
求\(n\)个点的任意无向图中 : 每块边数的\(k\)次方的和
记\(m(s)\)表示图\(s\)的边数
记\(h(n)\)表示任意图方案数
记\(g(n)\)表示连通图方案数
记\(f(n)\)表示任意图 每块边数\(k\)次方的和
记\(t(n)\)表示连通图 边数\(k\)次方
其中\(t(i)\)为连在一起的幻想乡 I
中的\(g(i)\)
xsy 1544 - fixed
矩乘不动点 -> 建图 -> 求\(n\le 3000\)个点的非(连通强连通图)计数
任意图- 连通强连通
cogs 2395 - 二分图计数 I ~ III
详见 总结
xsy 1300 - 原题的价值
求度数\(k\)次方 的和
\begin{aligned}
h(n) &= n * 2^{\binom {n-1} 2 }\sum_{i=0}^{n-1}\binom {n-1} i i^k\\
\sum_{i=1}^{n-1}\binom {n-1} i i^k&= \sum_{i=0}^{n-1}\binom {n-1} i \sum_{j=0}^k \left{\begin{matrix}k\ j\end{matrix}\right} \binom i j j!\
&= \sum_{j=0}^k \left{\begin{matrix}k\ j\end{matrix}\right} j! \sum_{i=0}^{n-1} \binom i j \binom{n-1}{i}\
&= \sum_{j=0}^k \left{\begin{matrix}k\ j\end{matrix}\right} j! \sum_{i=0}^{n-1} \binom {n-1}j\binom {n-1-j}{i-j}\
&= \sum_{j=0}^k \left{\begin{matrix}k\ j\end{matrix}\right} j! \binom {n-1}j\sum_{i=j}^{n-1} \binom {n-1-j}{i-j}\
&= \sum_{j=0}^k \left{\begin{matrix}k\ j\end{matrix}\right} j! \binom {n-1}j\sum_{i=0}^{n-1-j} \binom {n-1-j}{i}\
&= \sum_{j=0}^k \left{\begin{matrix}k\ j\end{matrix}\right} j! \binom {n-1}j 2^{n-1-j}\
\end{aligned}
bzoj 3812 - 主旋律
\(n\le 15\)的图 ,求删掉一些边后强连通方案数
删若干边 \(\Leftrightarrow\)生成子图
即考虑强连通的dp式, 变成枚举子集, 然后利用给定图的边集去计算
枚举状态 + 枚举该状态子集 \(\Theta (3^n)\)
*hdu 5304 - 基环树计数
\(n\le 16\)的图, 求生成子图中基环树计数