「刷题」小星星

我很久以前就做过这道题,但是当时没有想出来于是扔掉了(在状压dp那块),今天被学长重新拿出来再讲一次,终于有了点思路。

先讲一下暴力思路,说是暴力也很难想了。设dp[i][j][s]为以树上编号为i的点为子树,i对应原图的j的,s是i的子树中包含对应原图中的点状态为s的方案数。

那么写一下式子。

$ dp[i][j][s]= sum limits_t^{t|s=phi} sum limits_{v,v otin s}^{e(j,v)} sum limits_t^{tin{son[i]}}dp[t][v][t] $

也就是说枚举s的补集和与j相连的v以及i的儿子t来进行转移,

时间复杂度是 $ O(3^n n^2) $ 会炸掉。

关于补集的复杂度是$ 3^n $ 的证明。

证明:

  设枚举的子集中的元素个数是i,那么这种子集的个数就是$ 2^i $。

  那么:

   $ ans=sum limits_{i=0}^n C_n^k 2^i  $

    $  =sum limits_{i=0}^n C_n^k 2^i 1^n-i $

  由二项式定理得:

   $  ans=(2+1)^n=3^n $

证毕。

现在考虑正解,如果我们删去最后一维会怎么样。

我们无法统计到底是否是一个双全集映射,因为可能有许多点没有被计算入最终的情况,也就是所谓重复的图点出现在树中,虽然连接是合法的,但是集合映射不同。

考虑大力容斥。

我们用每个点都在映射范围内的减去有一个不在的,再加上有两个在的,在减去……

奇加偶减,容斥出结果。

原文地址:https://www.cnblogs.com/Lrefrain/p/11234363.html