「LOJ#3399」Communication Network

[egin {align*} & sum_{T2}|T1cap T2|cdot 2^{|T1cap T2|} \ = & sum_{T2} sum_{Ssubseteq T1cap T2} sum_{Tsubseteq S} left(-1 ight)^{|S| - |T|} |T|cdot 2^{|T|} \ = & sum_{Ssubseteq T1} f_S left(-1 ight)^{|S|} sum_{Tsubseteq S} left(-1 ight)^{|T|} |T|cdot 2^{|T|} \ = & sum_{Ssubseteq T1} f_S left(-1 ight)^{|S|} sum_{k = 0}^{|S|} inom {|S|} {k} kleft(-2 ight)^{k} \ = & sum_{Ssubseteq T1} left(-2|S| ight) cdot f_S left(-1 ight)^{|S|} sum_{k = 0}^{|S| - 1} inom {|S| - 1} {k - 1} left(-2 ight)^{k - 1} \ = & sum_{Ssubseteq T1} left(-2|S| ight) cdot f_S left(-1 ight)^{|S|} left(-1 ight)^{|S| - 1} \ = & 2sum_{Ssubseteq T1} |S| cdot f_S \ = & frac {2} {n^{2}} sum_{Ssubseteq T1} |S| prod ncdot a_i end {align*} ]

其中 (f_S) 表式包含边集 (S) 的树的数目,(k) 表示 (S) 形成的连通块数目,({a_i}) 表示 (S) 形成的各个连通块大小。

考虑组合意义。对于一个边集 (S),它对答案的贡献是:选出不在 (S) 中的一条边,在每个连通块中选一个点对答案造成乘 (n) 的贡献。并对所有 (S) 求和。

考虑 dp。记 (dp_{u,0/1,0/1}) 表示考虑 (u) 这棵子树,(u) 所在的连通块中是否选点,(u) 子树中是否选边,所有已确定连通块的贡献的和。

转移是显然的就是容易写错

Code

原文地址:https://www.cnblogs.com/realSpongeBob/p/LOJ3399.html