[Bijective-proof]完全二分图的生成树个数求解

题目:

给定完全二分图,左右分别有n1和n2个顶点,求其生成数个数。

知识补充1:完全二分图定义

        对某完全图(V,E),将其顶点V划分在两个集合A,B中。取边集E中任意一条边e,若其两个顶点一个在集合A,一个在集合B中,则该完全图为完全二分图。

29d41a6a2df24739828f529baa9dce2a.png

知识补充2:完全二分图的常见证明方法---染色法

        为证明一个图是二分图,通常采用染色法。即遍历二分图每一条边(A,B):

①假设A有颜色,若B无颜色:若A为黑色,则将B染成白色。若A为白色,则将B染成黑色。

②假设A有颜色,B有颜色:若A颜色=B颜色,则不是二分图。(无法将该边的两点划分到黑色-白色两个集合中)

知识补充3:prufer序列

        一种完全图生成树的计数方法,可以将完全图生成树一一对应于一个prufer序列。则由序列的排列数,可由映射关系求解出生成树的个数。(具体暂时不介绍)

        本体需要用到的prufer序列的结论:

①n节点无向图的无根树,对应序列长度为n-2

②当我们将图的叶子节点删除时,其邻节点会被加入到prufer序列当中。

本题题解:

        1.已知n点完全图生成树的prufer序列长度都为n-2,且序列构造结束必然剩下两个点,这两个点形成一条边。

        2.针对二分图而言,最后剩下的两个点必然一个为黑点,一个为白点。我们假设黑点集合为A(左边节点集合,大小为n1),白点集合为B(右边节点集合,大小为n2)

        3.对于一张已经染好黑白二色的二分图,我们现在求解一个prufer序列:按照prufer序列构造原则,我们每一步会删除一个叶子节点,同时加入其邻节点:

f778311279a048c1b9934cc007b6fae3.jpg

①若当前删除节点为黑节点,则prufer序列中会写入一个白色节点。

②若当前删除节点为白节点,则prufer序列中会写入一个黑色节点。

当prufer序列构造完成时:

总共要删除n1-1个黑色节点,所以prufer序列会存在n1-1个白色节点。

同理,总共要删除n2-1个白色节点,所以prufer序列会存在n2-1个黑色节点。

所以prufer序列会存在n1-1个白色节点。n2-1个黑色节点。

回顾集合大小定义

黑点集合为A(左边节点集合,大小为n1),白点集合为B(右边节点集合,大小为n2)

因此,prufer序列的可能组合计数有:

        ①选出n1-1个白色节点:  gif.latex?n_%7B2%7D%5E%7Bn_%7B1%7D-1%7D

        ②选出n2-1个黑色节点:    gif.latex?n_%7B2%7D%5E%7Bn_%7B1%7D-1%7D

乘法原理,总共有:gif.latex?n_%7B2%7D%5E%7Bn_%7B1%7D-1%7D*gif.latex?n_%7B2%7D%5E%7Bn_%7B1%7D-1%7D

相关题目:洛谷[bzoj4766]文艺计算姬

猜你喜欢

转载自blog.csdn.net/m0_67441224/article/details/129151257
今日推荐