我们先令one个点两两匹配,构成
o
n
e
2
\frac{one}2
2one条只含两个点的链。
不妨枚举当前有n条链。假设增加一条,则点数增加为2*n+2。
枚举点1连接的是哪个点,这有2n+1种可能;而剩下的2n个点,两两匹配成i条链。
因此,递推式为
h
n
+
1
=
(
2
∗
n
+
1
)
∗
h
n
h_{n+1}=(2*n+1)*h_n
hn+1=(2∗n+1)∗hn,其中n为链数。
现在,我们再将度数为2的点插入到这些链中。
设
g
i
g_i
gi表示有i个度数为2的点在链中。新插一个点,我们可以插在所有链的非链首节点的左边。譬如下图:
我们可以插在任意一个蓝点左边,因此有3+2=5种方案。实际上,记有k条链,第i条链的链长为
l
e
n
i
len_i
leni,插入新点的方案即为
∑
i
=
1
k
l
e
n
i
−
1
\sum_{i=1}^k len_i-1
∑i=1kleni−1。 不难发现,这其实等于已插入的点数+链数。
因此,
g
i
=
g
i
−
1
∗
(
i
−
1
+
o
n
e
2
)
g_i=g_{i-1}*(i-1+\frac{one}2)
gi=gi−1∗(i−1+2one),其中
o
n
e
2
\frac{one}2
2one为链数。
环的情况
环的情况就有些复杂了。
考虑DP。设
f
i
,
j
f_{i,j}
fi,j表示i个度数为2的点在环上,其中有j个一元环的方案数。
设
f
i
,
j
f_{i,j}
fi,j表示i个度数为2的点,其中j个点在环上(即剩下的i-j个点在链上)的方案数。
有以下三种转移:
f
i
,
j
=
{
f
i
−
3
,
j
−
3
∗
C
i
−
1
2
新
建
三
元
环
f
i
−
1
,
j
−
1
∗
(
j
−
1
)
将
点
i
插
入
一
个
环
中
f
i
−
1
,
j
∗
(
i
−
j
−
1
+
o
n
e
2
)
将
点
i
插
入
一
条
链
中
f_{i,j}=\left\{ \begin{aligned} &f_{i-3,j-3} *C_{i-1}^2 & & 新建三元环 \\ &f_{i-1,j-1} *(j-1) & & 将点i插入一个环中 \\ &f_{i-1,j} \ \ \ *(i-j-1+\frac{one}2) & & 将点i插入一条链中 \end{aligned} \right.
fi,j=⎩⎪⎪⎨⎪⎪⎧fi−3,j−3∗Ci−12fi−1,j−1∗(j−1)fi−1,j∗(i−j−1+2one)新建三元环将点i插入一个环中将点i插入一条链中
新建环的贡献为何是
C
i
−
1
2
C_{i-1}^2
Ci−12呢?我们假定点i就在新环内,然后从剩下的i-1个点中选2个出来陪它。如若不然,则有可能算重。然后不必再因会翻转除以2,因为三元环定是唯一的。
这样的话,
a
n
s
=
∑
i
=
0
t
w
o
f
t
w
o
,
i
ans=\sum_{i=0}^{two} f_{two,i}
ans=∑i=0twoftwo,i,其中two为度数为2的节点的个数。