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

浙公网安备 33010602011771号