一棵$2n$个结点的树,进行$n$个回合,每个回合在树上选择一个白色和黑色的结点,如果某个在某个子树内则不平局,问恰好有$k$个非平局的情况。
假设有$x$个平均其他乱选的非平局为$g[x]$,则有:
设$dp[u][x]$为在$u$这颗子树选择$x$对非平局的情况。$g(i)=dp[1][i]\times 2^{2n-2i}$
对于子树的转移,如果不选当前结点即$dp[u][i]=\sum dp[v_1][a]\times dp[v_2][b]\times dp[v_2][c]\times dp[v_4]d$
其实就是好多卷积,但是不需要用$FFT$,单纯$n^2$即可,可以证明复杂度为$O(n^2)$
如果选择的这颗子树$dp[u][i+1]=dp[u][i]\times(cnt[a[u]\oplus1]-i)$
- 注意开个临时数组保存卷积
- 注意不要被覆盖
代码
1 |
|