图计数

各种图的计数

有标号无根树

Prüfer序列

引入强而有力的Prüfer序列

将一棵n个节点从1n标号的无根树用[1,n]中的n2个整数表示。可以理解为完全图的生成树与数列之间的双射关系。

其建立

每次选编号最小的叶子,记录它连向的点的编号,并删除这个叶子。重复n2轮直到剩下两个点。

可以用堆维护这个过程,O(nlogn)建立。

也可以线性构建,首先记录当前编号最小(设为p)的叶子,删除其连向的点并检查是否产生新的叶子。若新产生了叶子,设其编号为x,如果x<p,那么x就是当前最小,立即删除x,重复以上过程指导新产生的叶子编号比p大或者没有新的叶子产生。

x>p或者没有新的叶子产生时,在编号序列上从p开始往后扫到下一个最小的编号使得其为叶子。

这样是O(n)的。

其性质

  • 构造完Prüfer序列后剩下的两个点之一一定是编号为n的点。

  • 每个结点在序列中的出现次数为其度数1,叶子结点没有出现。

Prüfer序列与一棵有标号无根树一一对应

利用其重建树

就是构建的逆过程。推一下。

Cayley's Formula

完全图Knnn2棵生成树。

推导这个公式的方法很多,但Prüfer序列是最简单的。任意一个值域在[1,n]长度为n的整数序列都唯一对应了一棵Kn的生成树,于是有nn2棵。

图联通方案数

Q:

n个点的有标号无向连通图,其中已确定k个连通块,第i个连通块的大小为si,现在添加k1条边使得图连通,求方案数。

首先将一个连通块视作一个点,将k个连通块的度数序列设出来{di}。度数之和为边数的两倍,于是有1ikdi=2k2

对于一个给定的度数序列构造Prüfer序列的方案数为(k2d11,d21,dk1),这是因为Prüfer序列长度为k2,随便划分到[1,k]中去的方案数。

对于第i个连通块,接到它上面的度数在其内部还要分配,方案数为sidi

于是对于一个给定的度数序列,其使图连通的方案数为(k2d11,d21,dk1)1iksidi

现在度数序列不定,我们要枚举度数序列,然后把每种度数序列的方案数加起来。

式子就是:

di1,di=2k2(k2d11,d21,dk1)1iksidi

于是上多项式定理,就得到了(1iksi)k21iksi,即nk21iksi

有标号无向连通图

有标号无向连通图计数,n103

我们记 fn 表示顶点数为 n 时互不相同的有标号无向连通图个数,gn 表示顶点数为 n 时互不相同的无向图个数。

显然,gn=2(n2)

我们考虑将所有的图按标号为 1 的点所在的连通块大小分类,可以得到:

gn=i=1n(n1i1)figni

将含有 fn 的一项单列出来,

gn=i=1n1(n1i1)figni+fn

所以得到 fn=gni=1n1(n1i1)figni
于是 O(n2) 计算即可。

Matrix-Tree定理

LGV引理

posted @   RandomShuffle  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示