状压 dp.
由于图的点数比较少,所以可以先 $O(2^n)$ 把真实的最大独立集大小给算出来,然后算有几个集合使得答案等于它.
设 $dp(S,i)$ 表示当前排列中已经加入的元素集合为 $S$ ,算出的独立集大小为 $i$ 的方案数.
转移时,考虑将一个点 $x$ 加入独立集中,记 $x$ 以及它所有邻居构成的集合为 $T$ .
那么 $x$ 必须是 $T-S$ 中第一个出现的元素,转移有
$$
dp(S\cup T,i+1)\leftarrow dp(S,i)\cdot A_{n-|S|}^{|T-S|}\cdot \frac{1}{|T-S|}
$$
$T-S$ 表示 $S$ 在 $T$ 中的相对补集,即在集合 $T$ 中,但不在集合 $S$ 中的所有元素构成的集合.
时间复杂度 $O(m+2^n\cdot n)$ .
1 | //%std |