CF1111E Tree 题解

Codeforces
Luogu

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 题,懒得写,咕咕咕

原文地址:https://www.cnblogs.com/pealfrog/p/15392748.html