【题解】uoj#667 【UNR #5】提问系统
啊啊啊啊啊我怎么这么蠢啊啊啊啊啊啊啊啊啊啊啊啊这题想了这么久啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊我是不是没救了啊啊啊啊啊啊啊
这是题面。
首先把答案变成 \((n-p_b)p_b^2\),把栈操作建一棵树。
然后考虑暴力,就设状态 \(f_{i,j,k}\) 表示在第 \(i\) 号点,其到根的路径上选了 \(j\) 个 b,子树内用 \(k\) 个 b 的方案数,然后瞎转移。
复杂度很劣,但考虑最后我们是要枚举出状态中的 \(k\),然后把答案累加上 \((n-k)k^2\times f_{0,0,k}\),那么不妨把 \(k\) 从状态里拿出来,直接记录 \(k^2,k^3\) 来做。
设 \(f_{i,j,c}\) 表示到 \(i\) 号点,其到根的路径上选了 \(j\) 个 b 的条件下所有方案的子树内 b 节点个数 \(c\) 次方和,然后枚举一个出边,考虑那个点选 b 和不选 b 转移。