CF1111E Tree 题解
Link.
Description.
给定一棵树,每次选择 \(k\) 个点,问把这 \(k\) 个点分成不超过 \(m\) 个集合,满足
- 不存在两个节点属于同一个集合,它们之间存在祖先后代关系。
集合和集合之间本质不相同。
\(\sum k\le 10^5,1\le m\le 300\)
Solution.
虚树,变成有 \(k\) 个标记点然后划分成 \(m\) 个集合。
然后接下来大概率是一个 \(O(nm)\) 复杂度的 dp
。
发现如果设状态为 当前到 \(x\) 分成了 \(k\) 个集合 很难转移。
可以直接设为 当前到 \(x\) 分成 \(k\) 个不同集合,可以为空。
于是就有 \(dp_{x,k}=\prod_{y\in\text{son}(x)}dp_{y,k}\),因为每次只能相对应的合并。
如果当前这个点是标记点,则有 \(dp'_{x,k}=k\cdot dp_{x,k-1}\),是选择一个盒子放当前的根。
然后再从这个考虑如何求答案,设分成 \(m\) 个集合答案是 \(f\)。
容斥后则有 \(f_k=\sum_{i=0}^k(-1)^i\dbinom{k}{i}dp_{k-i}\)。
Coding.
大 shit 题,懒得写,咕咕咕