概要
計算量 $O(N^42^N)$ なので、指数は公式解説よりもよいです(本問の制約下で fastest がとれるかは分かりません)。
必要に応じて、集合べき級数解説 を参照してください。
【2025/05/11】計算量 $O(N^32^N)$ になることが分かったので,追記しています.
解法
$S$ と書いたら頂点集合を表します。
点やサイクルを橋でつないだものをカクタスと呼ぶことにします。
数えるべきグラフは、各連結成分がカクタスであるようなグラフです。まず、次を求めます:
- $dp[S]$:頂点集合 $S$ を点またはサイクルにする方法の数え上げ。
次に、辺 $m=1,2,\ldots,M$ に対して次を計算します:
- $dp[S]$:頂点集合が $S$ であり、橋がすべて辺 $1,2,\ldots,m$ のいずれかであるようなカクタス。
橋として使用可能な辺 $ab$ をひとつ追加する操作を考えます。すると、新たにできるグラフの頂点集合は、点素な集合 $S_1, S_2$(ただし $a\in S_1$, $b\in S_2$)に対して $S_1\amalg S_2$ と書けるものです。よって、$dp$ のうち $a$ を含まない集合における値を $0$ に置き換えたものを $dp_a$ などと書いて、$dp ← dp + \mathrm{subset convolution}(dp_a,dp_b)$ といった要領で dp テーブルを更新すればよいです。
この計算をすべての辺に行えば、$dp[S]$ として、頂点集合 $S$ に対するカクタスの数え上げが得られています。最後に $\exp(dp)$ を計算すれば、各連結成分がカクタスであるようなグラフの数え上げが得られます。
結局
- サイクルの数え上げ
- 辺の個数だけ、subset convolution
- set power series exp
をやればよく、計算量 $O(MN^22^N)\subset O(N^42^N)$ が達成できます。
解法2
計算量 $O(N^32^N)$ で解きます.
$r=0,1,2,\ldots$ 順に,各集合を次を満たすようにする方法を求めることにします:
- 連結であって,各二重辺連結成分は点またはサイクルである.さらに橋は頂点 $0,1,\ldots,r$ の間にしか存在しない.
サイクルを数える dp から $r=0$ の場合が求まり,$r=n-1$ の場合が求めたいものです.
$r-1$ の場合が求まっているとして $r$ の場合を求めます.
$r$ を含む場合以外は更新不要で,$r$ を含む集合についてのみ再計算をします.$r-1$ の場合の条件を満たすものを good graph と呼ぶことにすると,「$r$ を含まない good graph に $r$ からの橋をつけたもの」いくつかを「$r$ を含む good graph」につなげるという形になります.前者を set power series exp で求めて後者と subset convolution でつなげれば,この計算は $O(N^2\cdot 2^N)$ でできます.すべての $r$ でこれをやれば計算量 $O(N^32^N)$ になります.