两个nb式:
集合Ai表示含有Pi性质的集合
1.不含P的并 = S - 1个交 + 2 个交 - 3个交......
2.包含P的并 = 1个交 - 2 个交 + 3个交......
文氏图可以很好的理解。包含P的并是不含P的补集,两者相加就是全集。
1.Amusement Park
绝了。。。做了好几天,首先如果一个图翻成DAG用了p次,那么这个DAG的反图也是DAG,这个DAG翻了m - p次,也就是可以两两分组,一组内的次数平均m/2,我们只用求出DAG的方案数即可。
设dp[S]选的点为S,组成DAG的方案数,DAG---拓扑序,所以每次加入一个独立集,保证仍然是一个DAG
dp[S] += dp[S ^ sub];
但是问题在于对于一个独立集,它一次加入一个,一次加入两个,或者一次加入三个,的贡献都是cnt,但是我们只想要一个,所以熔池系数是\((- 1) ^ {|S| + 1}\),那么直接熔池技术。
$ dp[S] = \sum dp[S \space xor \space {sub}] * (-1) ^{builtinpopcount(sub) + 1 } $
2.串珠子
铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子。现在铭铭想用绳子把所有的珠子连接成一个整体。
现在已知所有珠子互不相同,用整数1到n编号。对于第i个珠子和第j个珠子,可以选择不用绳子连接,或者在ci,j根不同颜色的绳子中选择一根将它们连接。如果把珠子看作点,把绳子看作边,将所有珠子连成一个整体即为所有点构成一个连通图。特别地,珠子不能和自己连接。
铭铭希望知道总共有多少种不同的方案将所有珠子连成一个整体。由于答案可能很大,因此只需输出答案对1000000007取模的结果。
g[S] 不保证联通图的个数
f[S]保证联通
g[S]直接所有A + 1乘起来就行。
f[S] 为总方案数-子集联通 * 补集 不保证联通;
套路,目前想不明白。
点击查看代码
f[S] = g[S];
for(int sub = S ^ (S & (-S));sub;sub = (sub - 1) & (S ^ (S & (-S))))f[S] = (f[S] - f[S ^ sub] * g[sub] % Mod) % Mod;
参考:https://www.cnblogs.com/Parsnip/p/11530658.html
标签:DAG,sub,技术,珠子,dp,个交,熔池 From: https://www.cnblogs.com/zasdcn/p/16908022.html