标签:第一个 line row mit 合并 连通 splay blog 生成
0.一堆\(dp\):https://www.cnblogs.com/Lrefrain/p/12123541.html
1.208 UOIP十合一
问你某张图有多少个边集中不存在环。
1.DAG
2.多个边数很少的连通块
3.多个连通块,且其中仅含有一个环
4.分层图,每一层仅有4个点
5.多个强连通分量,每个中的边数很少
6.完全图
7.8 n很小的有向图
1.DAG
除了重边之外的所有边的个数为\(c\)。
答案为:\[ans=2^c\]
2.多个边数很少的连通块
连通块中暴力枚举边集暴力判断,然后各个连通块的答案乘起来就可以了。
3.多个连通块,且其中仅含有一个环
找到每个连通块中的环,然后环上的边不能全选,再乘上剩下所有的边的方案就可以了。
4.分层图,每一层仅有4个点
状压连通性。
\(dp[S]\)为联通状态为\(S\)的方案。
然后枚举两层之间的边集判断+转移即可。
5.多个强连通分量,每个中的边数很少
和2差不多。
桥就直接乘2即可。
6.完全图
设\(dp[i]\)为\(i\)个点的\(DAG\)生成数目。
那么得到递推:
\[dp[i]=\sum\limits_{j=1}^{i}\binom{i}{j}(-1)^{j-1}dp[i-j]2^{j(i-j)}\]
和主旋律那个题一样,在枚举最后一层来转移。
7.8 n很小的有向图
这个就是有向图\(DAG\)计数,巨神兵的原题了。
\(dp[S]\)为\(S\)中的\(DAG\)生成个数,\(w[S\rightarrow T]\)点集\(S\)向点集\(T\)中的边的个数。
那么转移有:
\[dp[S]=\sum\limits_{T\subseteq S}(-1)^{|T|-1}dp[S-T]2^{w[T\rightarrow S-T]}\]
在解释一次的话就是说这个容斥的意思是把不同顺序的方案容斥成一个。
2.449 喂鸽子
好题。
看一眼就知道是\(Min\_Max\)容斥是吧。
然后考虑该怎么做。
设\(Min(i)\)为喂\(i\)只鸽子最先喂饱一只的期望时间。
我们要求的答案数组为:\(Max(i)\),喂\(i\)只格子最后喂饱那只的期望时间。
那么直接用\(Min\_Max\)容斥得到:
\[Max(n)=\sum\limits_{i=1}^{n}(-1)^{i-1}\binom{n}{i}Min(i)\]
相当于合并了子集形式的贡献,因为容斥系数都是一样的。
假设我们只喂\(i\)只鸽子的话,最先喂饱某一只的期望时间是\(f(i)\)。
那么:
\[Min(i)=\frac{n}{i}f(i)\]
这样我们求出\(f(i)\)即可。
假设某只鸽子第一个吃饱,那么他一定吃了\(K\)次。
设一个生成函数,表示没有鸽子吃饱的情况下,所有的鸽子吃了某个个数的玉米粒的方案:
\[G(x)=\sum\limits_{i=0}^{K-1}\frac{x^i}{i!}\]
一个指数生成函数,表示的意思是一只鸽子吃的玉米粒个数为\(i\)的方案,因为每只鸽子各不相同,所以是指数型生成函数。
多只鸽子的话直接乘起来就行了。
我们枚举其他鸽子吃的个数来求\(f(i)\):
\[f(i)=i\sum\limits_{j=1}^{+\infty}\binom{j+K-1}{j}(j+k)[x^j]G^{i-1}(x)\frac{1}{i^{j+k}}\]
这个是一个用方案算概率的形式求期望。
总方案是\(\frac{1}{i^{j+k}}\)
然后插板出除了最后一个玉米的方案是\(\binom{j+K-1}{j}\)。
同时对于这\(j\)个玉米的分配则有:\([x^j]G^{i-1}(x)\),表示除了吃饱了的那只鸽子,剩下的\(i-1\)只鸽子吃了\(j\)个玉米粒的方案。
然后最后不一定是哪一只吃饱了。
所以乘\(i\),鸽子个数。
这样直接用多项式乘法就行了,复杂度是:\(O(n^2Klog(nK))\)
然后还有一种\(O(nK)\)的做法。
很神仙的\(dp\)。
把题解直接粘过来了。
标签:第一个 line row mit 合并 连通 splay blog 生成
原文地址:https://www.cnblogs.com/Lrefrain/p/12274363.html