题目:
和地震后的幻想乡思路一样,枚举点集。
因为求不连通容易,所以容斥一下,用全集减去不连通的。
也还是为了不重不漏枚举一个划分点。
哎呀真是一模一样呢!
1.理解更深的一点:划分点的必要性。
比如点集{1,2,3,4},如果不枚举划分点,减掉的东西里:1)当 f [ 1,2 ] 和 g [ 3,4 ] 的时候,含一个 f 1,2 ] x f [ 3,4 ],
2)当 f [ 3,4 ] 和 g [ 1,2 ] 的时候,含一个 f [ 1,2 ] x f [ 3,4 ];
所以必须枚举划分点。
2.深刻的不明白的问题!
发现如果指定连通的子集中必须包含划分点,就没问题;可是如果指定成连通的子集中必须不包含划分点,就错误。这是为什么?
这都是因为那种 只有自己一个点还算联通 的情况太特殊了!
考虑反例:其实就是会把那种图中一条边都没有的情况减好多遍。这种感觉。
#include#include #include #define ll long longusing namespace std;const int N=16;const ll mod=1e9+7;int n,c[N+5][N+5],lm;ll f[(1< <