熔池技术

两个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;

3.朴素计数:

F序列,使得gcd(F) = x,lcm(F) = y,求F序列的种类数。

考虑gcd,lcm,就是质因子的幂次最小值和x的相同,最大值和y的相同,但是质因子独立(这个东西没想到),然后就是至少一个x,至少一个y,直接容斥就行,总共是$(y - x + 1)^n $,不含x或者y的是 $ (y - x)^n $ ,两者都不含的是 \((y - x - 1) ^ n\)

也可以推式子,就是枚举有多少x,y,疯狂用二项式定理就行

参考:https://www.cnblogs.com/Parsnip/p/11530658.html

posted @ 2022-11-20 10:50  Asder1228  阅读(66)  评论(0编辑  收藏  举报