题目传送门:https://codeforces.com/problemset/problem/11/D
题目大意:
给定一个简单无向图,求图中简单环的个数(\(n\leqslant 19\))
\(n\)?很小的话,考虑状压
设\(F[S][i]\)表示点集\(S\)中遍历到\(i\)的方案数
转移的话,我们枚举下一个点\(j\),如果\(j\notin S\),则有\(F[S|2^j][j]+=F[S][i]\);如果\(j\in S\),则成环,有\(Ans+=F[S][i]\)
但这样存在一个问题,由于起点不固定,每个大小为\(Size\)的环都会被算\(Size\)次
所以我们可以固定点集\(S\)中,编号最小的点为起点,这样每个环仅会被算两次(顺时针逆时针)
此外,由于没有记录边是否被使用过,因此两点(有边相连)也会被算入答案。又因为两点不存在顺逆时针差异,故仅会被算一次
综上所述,答案为\(\frac{Ans-m}{2}\)
/*program from Wolfycz*/
#include
CF