------ 总结 ------
无向图
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^{inom n 2}), (F(n))为与n有关的一个多项式
度数k次方和 原题的价值
总度数(k)次方 = (2^k) * 总边数k次方
每块点数(k)次方和 连在一起的幻想乡 IIII
每块边数(k)次方和 连在一起的幻想乡 IIIII
总边数(k)次方和xsy 1538 - 连在一起的幻想乡I II III
有向图, (2^{inom 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)次
多项式系数$$inom{n-2}{d_1-1,d_2-1,cdots, d_{n}-1}$$
*2. 无标号
3. notice
有标号时 : 有根树 = 无根树 * 可选根集大小
二叉树
1. 有标号
相比普通的树 , 此时有了强行的左右之分, 叶子间不是无序的
(行吧 感觉还是要看出题人)
2. 无标号
(Leftrightarrow)长度2n括号序列 (Longleftrightarrow)卡特兰数第(n)项 = (frac{inom{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{frac{-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^{inom {n - 1} 2} $$
乱连之后, 可以唯一确定与(1)相连的那(n-1)条边的状态 : 与被连接的点的度数相关
但是, 用(1)取补全度数后, 会不会导致(1)的度数为奇数呢?
不会. 任意图的度数之和为偶数
综上, 有标号欧拉图 总数 为(2^{inom {n-1} 2})
*平面图
------ Problems ------
任意图 - 有标号
xsy 1729 - 小朋友和二叉树
给定每个节点的可选权值集合((valge 1)),求权值和为(1..m)的二叉树分别有多少
对可选集合搞一个生成函数(C)
(T=T^2C+1) (别漏了+1, 因为边界空树(T_0=1))
求解二元一次方程
(T=frac{1pm 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} inom{n-1}{n-k} = n^{n-k} inom{n-1}{k-1}$$
另一种推法利用prufer
考虑将环上的边都断开, 然后加一个方点在中间, 权值(infty)
此时方点为根, 然后设环大小为(k), 然后首先(inom{n}{k})钦定一个环, 然后把权值设为(infty)
最后(k)位一定选择方点
除了最后(k)位之外, 剩下的最后一位, 一定填入(k)中之一
其他的随便
于是$$ F(n, k)= n^{n-k-1}kinom 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)个点的无向连通图中: 总边数的平方的和
(nle 2000)
我们记
(h_k(n))为任意n个点的图, 总边数的k次方和
(g_k(n))为任意(n)个点的连通图, 边数的(k)次方和
xsy 1538 - 连在一起的幻想乡 II
求(n)个点的任意无向图中 : 总边数的(k)次方和
(nle 10^9, kle 500)
打表发现 : (h_k(n))是(n)的(2k)次多项式, 乘上一个(2^{inom n 2 -k})
于是我们可以(Theta(k^3))求出(h_k(1..k))
然后先舍弃掉后面n在指数的那个部分, 利用线性插值出解 , 最后再补回n在指数的部分
xsy 1538 - 连在一起的幻想乡 III
好吧我承认这是ypl题..
求(n)个点的任意无向图中 : 总边数的(k)次方和
(nle 10^9, kle 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
矩乘不动点 -> 建图 -> 求(nle 3000)个点的非(连通强连通图)计数
任意图- 连通强连通
cogs 2395 - 二分图计数 I ~ III
详见 总结
xsy 1300 - 原题的价值
求度数(k)次方 的和
egin{aligned}
h(n) &= n * 2^{inom {n-1} 2 }sum_{i=0}^{n-1}inom {n-1} i i^k\
sum_{i=1}^{n-1}inom {n-1} i i^k&= sum_{i=0}^{n-1}inom {n-1} i sum_{j=0}^k left{egin{matrix}k jend{matrix}
ight} inom i j j!
&= sum_{j=0}^k left{egin{matrix}k jend{matrix}
ight} j! sum_{i=0}^{n-1} inom i j inom{n-1}{i}
&= sum_{j=0}^k left{egin{matrix}k jend{matrix}
ight} j! sum_{i=0}^{n-1} inom {n-1}jinom {n-1-j}{i-j}
&= sum_{j=0}^k left{egin{matrix}k jend{matrix}
ight} j! inom {n-1}jsum_{i=j}^{n-1} inom {n-1-j}{i-j}
&= sum_{j=0}^k left{egin{matrix}k jend{matrix}
ight} j! inom {n-1}jsum_{i=0}^{n-1-j} inom {n-1-j}{i}
&= sum_{j=0}^k left{egin{matrix}k jend{matrix}
ight} j! inom {n-1}j 2^{n-1-j}
end{aligned}
bzoj 3812 - 主旋律
(nle 15)的图 ,求删掉一些边后强连通方案数
删若干边 (Leftrightarrow)生成子图
即考虑强连通的dp式, 变成枚举子集, 然后利用给定图的边集去计算
枚举状态 + 枚举该状态子集 (Theta (3^n))
*hdu 5304 - 基环树计数
(nle 16)的图, 求生成子图中基环树计数