我们枚举第
i
i
i个点所在的连通块的大小
k
(
1
<
=
k
<
i
)
k(1<=k<i)
k(1<=k<i)。
很明显我们要从前
i
−
1
i-1
i−1个点中选出
k
−
1
k-1
k−1个点,即
(
k
−
1
i
−
1
)
(^{i-1}_{k-1})
(k−1i−1),这个连通块的贡献为
f
[
k
]
f[k]
f[k],剩下的
i
−
k
i-k
i−k个点随便连。
所以
f
[
i
]
=
2
C
i
2
−
∑
k
=
1
i
−
1
f
[
k
]
∗
(
k
−
1
i
−
1
)
∗
2
C
i
−
k
2
f[i]=2^{C_i^2}-\sum_{k=1}^{i-1}{f[k]*(^{i-1}_{k-1})*2^{C_{i-k}^2}}
f[i]=2Ci2−∑k=1i−1f[k]∗(k−1i−1)∗2Ci−k2。
题解
题目可以转化为,对于一个集合
X
X
X:
一个点
i
i
i存在,当且仅当
X
X
X中有集合包含元素
i
i
i。
一个点
i
i
i向点
j
j
j连边,当且仅当
i
,
j
i,j
i,j同时在
X
X
X的一个集合出现过。
这个图的联通块数=
g
(
X
)
g(X)
g(X)。
那么我们就可以很愉快地进行连通性DP了。
我们先求出
g
[
i
]
g[i]
g[i]表示包含
i
i
i个点的集合有多少个。
然后再用
g
[
i
]
g[i]
g[i]来求出
f
[
i
]
f[i]
f[i]表示包含i个点的图为一个连通块的方案数。(注意,这里的
f
f
f和刚才的求法有一些细节上的差别,但本质相同)
最后是求答案的DP
a
n
s
[
i
]
[
j
]
ans[i][j]
ans[i][j],表示
i
i
i个点组成
j
j
j个联通块的方案数。
其实和求
f
f
f有异曲同工之妙。
所以
a
n
s
[
i
]
[
j
]
=
∑
k
=
1
i
−
1
a
n
s
[
i
−
k
]
[
j
−
1
]
∗
(
k
−
1
i
−
1
)
∗
g
[
k
]
ans[i][j]=\sum_{k=1}^{i-1}{ans[i-k][j-1]*(^{i-1}_{k-1})*g[k]}
ans[i][j]=∑k=1i−1ans[i−k][j−1]∗(k−1i−1)∗g[k]。
最后的答案
∑
i
=
1
n
a
n
s
[
i
]
[
K
]
∗
(
i
n
)
\sum_{i=1}^n{ans[i][K]*(^{n}_{i})}
∑i=1nans[i][K]∗(in)