UOJ422 小z的礼物
考虑min-max容斥:
max ( S ) = ∑ T ⊆ S ( − 1 ) ∣ T ∣ + 1 min ( T ) \max (S) = \sum_{T\subseteq S} (-1)^{|T|+1} \min (T) max(S)=T⊆S∑(−1)∣T∣+1min(T)
对希望得到的物品的每一个子集,求出期望最早什么时候子集里至少有一个物品被拿到了,就能算出答案。
设包含了至少一个这个子集内的物品的相邻的格子对的数量是 a a a,所有的相邻的格子对的数量是 b b b,那么这个期望值就是 b a b\over a ab。 a a a是一个定值; b b b则可以看做(子集内每一个物品包含它的相邻格子对数量的和)-(同时包含了子集内的两个物品的相邻格子对的数量)。
设 f S , t f_{S,t} fS,t表示上一列选了的格子的集合是 S S S,之前选过的格子的(子集内每一个物品包含它的相邻格子对数量的和)-(同时包含了子集内的两个物品的相邻格子对的数量)为 t t t,所有方案的容斥系数的和。用类似轮廓线dp的方法转移,就可以做到 O ( 2 n n 2 m 2 ) O(2^n n^2m^2) O(2nn2m2)的复杂度。
LOJ2320「清华集训 2017」生成树计数
把原题的式子换一个表达的方式:把每个连通块看做一个点,设 d i d_i di为每个点的度数,则
v a l ( T ) = ( ∑ i = 1 n d i m ) ( ∏ i = 1 n d i m ) ( ∏ i = 1 n a i d i ) val (T) = (\sum_{i=1}^n d_i^m) (\prod_{i=1}^n d_i^m )(\prod_{i=1}^n a_i^{d_i}) val(T)=(i=1∑ndim)(i=1∏ndim)(i=1∏naidi)
因为式子里面有度数,所以考虑用prufer序列来计数。枚举每一个点在prufer序列中出现的次数 k i k_i ki,得到
A n s = ∑ k 1 + k 2 + ⋯ + k n = n − 2 ( n − 2 ) ! k 1 ! k 2 ! ⋯ k n ! ⋅ ∑ i = 1 n ( k i + 1 ) 2 m a i k i + 1 ∏ j ≠ i ( k j + 1 ) m a j k j + 1 Ans = \sum_{k_1+k_2+\cdots +k_n=n-2} {(n-2)!\over k_1!k_2!\cdots k_n!} \cdot \sum_{i=1}^n (k_i+1)^{2m}a_i^{k_i+1} \prod_{j\neq i} (k_j+1)^ma_j^{k_j+1} Ans=k1+k2+⋯+kn=n−2∑k1!k2!⋯kn!(n−2)!⋅i=1∑n(ki+1)2maiki+1j=i∏(kj+1)majkj+1
设
A i ( x ) = ∑ k = 0 ∞ a i k + 1 ( k + 1 ) m k ! x k B i ( x ) = ∑ k = 0 ∞ a i k + 1 ( k + 1 ) 2 m k ! x k A_i(x) = \sum_{k=0}^\infty {a_i^{k+1}(k+1)^m\over k!} x^k\\ B_i(x) = \sum_{k=0}^\infty {a_i^{k+1}(k+1)^{2m} \over k!}x^k Ai(x)=k=0∑∞k!aik+1(k+1)mxkBi(x)=k=0∑∞k!aik+1(k+1)2mxk
则
A n s = ( n − 2 ) ! ∑ i = 1 n ( B i ( x ) ∏ j ≠ i A j ( x ) ) [ x n − 2 ] Ans= (n-2)!\sum_{i=1}^n (B_i(x)\prod_{j\neq i} A_j(x) )[x^{n-2}] Ans=(n−2)!i=1∑n(Bi(x)j=i∏Aj(x))[xn−2]
因为 A i ( x ) A_i(x) Ai(x)里面有指数为 k + 1 k+1 k+1,还有 x k k ! x^k \over k! k!x