计数

------ 总结 ------

无向图

1. 有标号

\[h(n) = 2^{\binom n 2}$$表示 $n$个点的任意图计数 $g(n) $ 表示$n$个点的连通图计数 $un(n) $表示$n$个点的不连通图计数 $$h(n) = \sum_{k=1}^n \binom{n-1}{k-1} g(k) h(n-k)\]

\[un(n) = \sum_{k=1}^{n-1}\binom{n-1}{k-1} g(k)h(n-k) \]

\(g\)的一种常用方法为\(ln\)(分治fft)

即令\(H, G\)\(h, g\)的生成函数 , 有\(H = e^{G}, G = ln (H)\)

\(g\)的另一方法是容斥\(g=h-un\)

\[即g(n)=h(n) - \sum_{k=1}^{n-1} \binom{n-1}{k-1}h(n-k)g(k) \]

一种方法是把\(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)\)为 连通 的 无色 二分图 计数

\[h(n) = \sum_{i=1}^n \binom n i 2^{i(n-i)} \]

\(G = ln (H)\)

\(g' = g/2\)

\(H' = exp (G')\)

另外一种推法:

$H' ^{~2} = H $

为什么呢, 对于二分图的一个连通块, 染色方案只有两种

那么如果一个二分图 有k个连通块, 那么方案有\(2^k\)

\(H'^{~2}\)会导致无色图算重, 考虑\(k\)个连通块的方案, 它被卷积恰好算重\(2^k\)

DAG

照样的, 我们先不考虑连通性, 那么

\[h(n) = \sum_{k=1}^n (-1)^{k-1}\binom n k h(n-k) 2^{k(n-k)} \]

连通图直接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\)个点的任意图 计数

\[h(n) = \sum_{k=1}^n \binom n k h(n-k) f'(k) 2^{k(n-k)}$$ (任意图缩点后是一个$DAG$, 每个点表示一个强连通块) $$f'(n) = g(n) - \sum_{k=1}^{n} \binom{n-1}{k-1} g(k) f'(n-k)\]

有标号 - 欧拉图

\(\Leftrightarrow\)所有点的度数均为偶数

我们考虑先删掉与\(1\)相连的\(n-1\)条边

剩下乱连$$2^{\binom {n - 1} 2} $$

乱连之后, 可以唯一确定\(1\)相连的那\(n-1\)条边的状态 : 与被连接的点的度数相关

但是, 用\(1\)取补全度数后, 会不会导致\(1\)的度数为奇数呢?

不会. 任意图的度数之和为偶数

综上, 有标号欧拉图 总数 为\(2^{\binom {n-1} 2}\)

*平面图

Google搜到的

------ 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\)

\[\lim_{x\to 0} \frac {1 + \sqrt{1-4C(x)}}{2C(x)} = \infty \]

对于减号, 上下都趋于0, 因为\(C(x)\)无常数项, 我们令其为y, 然后洛必达

\[\lim_{y\to 0} \frac{1-\sqrt{1-4y}}{2y} = \lim_{y\to 0} \frac{2}{2\sqrt{1-4y}} = 1 \]

*xsy 3684 - 大朋友和多叉树

多叉树计数

xsy 1295 - 基环树计数

\(n\)个点\(n\)条边的带标号图计数, 没有模数

如果有模数可以像下面仙人掌计数那样搞 , 满足只有根是环, 求出有根树再除k就是无根图

这题可以这样

\[ans = F(n,k) \frac{\begin{bmatrix}k-1\\i\end{bmatrix}}{2} \]

即先枚举环大小, 轮换, 正反向 , 然后乘\(F(n,k)\), n个点k个森林计数

考虑算两次 , \(n\)个点\(k\)个块,说明连了\(n-k\)条边, 考虑连边的方案数\(S\)

\(S=F(n, k) (n-k)!\)

\[S= \prod_{i=1}^{n-k} n(n-i-1) = n^{n-k} (n-1)^{\underline{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}$$

把根连上

\[G = x ~ e^{\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\)次方和

\[h_0(n) = 2^{\binom n 2}$$ (即求方案数) $$h_1(n) = \binom n 2 2^{\binom {n} 2 - 1}$$ (单独考虑每条边) $$h_2(n) = \sum_{k=1}^n \binom{n-1}{k} [~ h_0(n-1) k^2 + 2 h_1(n-1) k + h_2(n-1)~]$$ (枚举每个点连边数) 又$$h_0(n)= \sum_{k=1}^n \binom{n-1}{k-1}h_0(n-k)g_0(k)~~~$$ (枚举连通块) $$h_1(n) = \sum_{k=1}^n \binom{n-1}{k-1} h_0(n-k) g_1(k) + h_1(n-k) g_0(k)$$ (枚举连通块) $$h_2(n) = \sum_{k=1}^n \binom{n-1}{k-1} [~h_0(n-k)g_2(k) + 2 h_1(n-k) g_1(k) + h_2(n-k) g_0(k) ~]$$ (枚举连通块) 后三行利用二项式展开$$\sum_{a\in h,b\in g}(a+b)^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\)的边数

\[\begin{aligned} &\sum_{s} m(s)^k\\ =&\sum_{s} \sum_{j=0}^k \left\{\begin{matrix}k\\j\end{matrix}\right\}\binom {m(s)}{j} j!\\ =&\sum_{j=0}^k \left\{\begin{matrix}k\\j\end{matrix}\right\} j! \sum_{s} \binom {m(s)}{j}\\ =&\sum_{j=0}^k \left\{\begin{matrix}k\\j\end{matrix}\right\} j! \binom {\binom n 2}{j} 2^{\binom n 2 - j} \end{aligned} \]

\(\Theta(k)\)即可解决问题

xsy 1538 - 连在一起的幻想乡 IIII

\(n\)个点的任意无向图中 : 每块点数\(k\)次方的和

\(h(n)\)表示任意图方案数

\(g(n)\)表示连通图方案数

\(f(n)\)表示任意图 每块点数\(k\)次方的和

\[h(n) = \sum_{i=1}^n \binom{n-1}{i-1} (~~g(i)f(n-i) + h(n-i)i^k~~) \]

xsy 1538 - 连在一起的幻想乡 IIIII

\(n\)个点的任意无向图中 : 每块边数的\(k\)次方的和

\(m(s)\)表示图\(s\)的边数

\(h(n)\)表示任意图方案数

\(g(n)\)表示连通图方案数

\(f(n)\)表示任意图 每块边数\(k\)次方的和

\(t(n)\)表示连通图 边数\(k\)次方

\[h(n) = \sum_{i=1}^n \binom {n-1}{i-1} (~~g(i)f(n-i) + h(n-i) t(i)~~) \]

其中\(t(i)\)连在一起的幻想乡 I中的\(g(i)\)

xsy 1544 - fixed

矩乘不动点 -> 建图 -> 求\(n\le 3000\)个点的非(连通强连通图)计数

任意图- 连通强连通

cogs 2395 - 二分图计数 I ~ III

详见 总结

xsy 1300 - 原题的价值

求度数\(k\)次方 的和

\[h(n) = n * \sum_{i=1}^{n-1} \binom {n-1} i i^k 2^{\binom {n-1} 2}$$(单独考虑每个点) 做法1 : 这个式子可以卷积求出$h$的前$k$项, 根据打表结果, $h(n)$是$n$的$k+1$次多项式 * $2^{\binom n 2}$ 可以先舍弃$2^{\binom n 2}$ , 然后线性插值, 最后补上 做法2 : 考虑斯特林展开 \]

\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}

\[ ## *范浩强 Alkane 无根无标号每个点度不超过4的树(烷烃) # 任意图 无标号 ## *Spoj PT07D 无标号无根树 无标号有根树 ## 最长链为n的二叉树 求最长链为n**无标号**二叉树, 儿子**有序** ,其中最长链可以从下到上再到下 考虑计算最长链, 我们只需要考虑一个点的$mxdep$ 记$f[i]$表示$mxdep=i$, 最长链长度$=n$的二叉树个数 记$g[i]$表示$mxdep = i$, 最长链长度$\lt n$的二叉树个数 dp好麻烦, 大概可以枚举左儿子状态, 找到对应合法右儿子, 维护下前缀和什么的, 可以$\Theta(n)$ # 给定图 - 有标号 ## bzoj 1005 - 明明的烦恼 $n\le 1000$个点的有标号图, 有的点度数给定, 有的点度数未知, 求方案数 $$\binom {n-2}{n-2-sum,~d_1,~d_2,~\cdots,~d_m} (n-m)^{n-2-sum}\]

bzoj 3812 - 主旋律

\(n\le 15\)的图 ,求删掉一些边后强连通方案数

删若干边 \(\Leftrightarrow\)生成子图

即考虑强连通的dp式, 变成枚举子集, 然后利用给定图的边集去计算

枚举状态 + 枚举该状态子集 \(\Theta (3^n)\)

*hdu 5304 - 基环树计数

\(n\le 16\)的图, 求生成子图中基环树计数

给定图 - 无标号

posted @ 2017-09-21 21:47  _zwl  阅读(1473)  评论(2编辑  收藏  举报