AT3617 Unicyclic Graph Counting 题解

主要提供一个推导的思路

前提概要:

在做这道题之前可以先做一下P2290 [HNOI2004]树的计数主要是来熟悉一个定理:

对于给定度数为\(d_{1\sim n}\)的一棵无根树共有\(\dfrac{(n-1-1)!}{\prod_{i=1}^n (d_i-1)!}\)种情况。

因为度数为\(d_i\)的结点会在\(prufer\)序列中出现\(d_i-1\)次,实际上就是多重集合的全排列。

正文

先不看环

也就是感性理解将环缩为一个点,那么就是一棵树。

设环的大小为\(L\),根据前提概要中的公式,那么
共有\(\dfrac{(n-L-1)!}{\prod_{i=1}^n (d_i-1)!}\)种情况。

根据圆排列的公式,从\(n\)个不同元素中不重复地取出\(m(1 \le m \le n)\)个元素在一个圆周上,叫做这\(n\)个不同元素的圆排列。如果一个\(m\)圆排列旋转可以得到另一个\(m\)圆排列,则认为这两个圆排列相同。特别地,当\(m=n\)时,\(n\)个不同元素作成的圆排列总数为\((n-1)!\)

但是,因为这是在一棵树上,所以不能根据某种对称性(可以感性理解下),需要对圆排列总数\(/2\),即\(\frac{(n-1)!}{2}\)

那么对于环,

不难发现环的大小一共可能为\(3\sim n-1\)种。

同时根据特殊性质,根据在\(prufer\)序列中出现次数与给出度数关系,有三种不同的点:

普通树上的点出现\(d_i-1\)次。

环上的普通点出现\(d_i-2\)次。

环上的某一个点出现\(d_i-3\)次。

综合起来

\(ans=\sum_{L=3}^{n-1} \dfrac{(n-L-1)!}{\prod Di!}\dfrac{(L-1)!}{2}\)

其中\(Di\)表示根据三种不同点的出现次数(前文已经提及),\(i\)的范围由环的点集范围决定(后面会讲如何递推)。

对于一个大小为\(L\)的环,很明显可以先预处理出
\(\dfrac{(n-L-1)!(L-1)!}{2}\)

至于\(\dfrac{1}{\prod Di!}\)可以用类似与树的计数递推组合数的思想,

设计状态 \(f_{i,j,k}\),其中$i,j,k \(表示\)i\(个点中,环上有\)j\(个点,已有\)k$个特殊环节点。

感觉别的题解应该对于状态的转移讲得比较清楚,那么本篇就补充一下状态的设计思路(即如何想到的):

根据点的分类和特殊性考虑设计三维的状态,毫无疑问第一维需要统计一共用了多少个点,又因为环套树中环的特殊性,以及统计方式的不同,可以设计出第二维为环上选了多少个点,再根据环上特殊点的特特特殊性,用\(0/1\)判断是不是即可。

最后根据转移即可统计出\(\sum_{L=3}^{n-1}f_{n,i,1}\)

最后,记得用逆元。

posted @ 2021-10-04 17:40  缥灵  阅读(85)  评论(0)    收藏  举报