1. 程式人生 > 其它 >CF1111E Tree 題解

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 題,懶得寫,咕咕咕