loading...

[CF735E]Ostap and Tree

链接

很 ok 的计数题。

Description

\(n\) 个节点的树染色,要求每个节点到最近的染色点的距离不超过 \(m\),求染色方案数。

原数据:\(1 \le n \le 100\)\(1 \le m \le 20\),加强:\(n \times m \le 10^7\)

Solution

\(d_i\) 表示 \(i\) 号节点到最近的染色点距离。显然,一组 \(\{d_n\}\) 至多对应 \(1\) 个方案。一个方案必然对应一组 \(\{d_n\}\)

证明(前一个结论;后一个类似):\(d_i = 0\) 是点 \(i\) 被染色的充要条件。确定哪些节点 \(i\) 被染色后,所有 \(d_i\) 都是确定值。

问题转变为求合法的 \(\{d_n\}\) 数量。

合法,即存在一种染色方案与之对应。经过严谨推理,合法的 \(\{d_n\}\) 满足这样的充要条件:

  • 相邻节点的 \(d_i\) 差值绝对值不超过 \(1\)
  • 对于 \(d_u \neq 0\) 的节点,其相邻节点中必须存在 \(d_v=d_u-1\)

形式证明有点麻烦,可以感性理解一下。

立即就有状态定义:\(f_{u,k,0/1}\) 表示 \(d_u=k\),且除父亲外,\(u\) 节点 无/有 相邻节点 \(v\) 满足 \(d_v=d_u-1\)(钦定 \(k=0\) 时这一维为 \(1\))。合并 \(u,v\) 状态是容易的(新状态为 \(f'\)):

\[\begin{aligned} &f'_{u,k,1} = f_{v,k-1,1} \times f_{u,k,0}+(f_{v,k-1,1}+f_{v,k,1}+f_{v,k+1,1}+f_{v,k+1,0})f_{u,k,1}\\ &f'_{u,k,0}=(f_{v,k,1}+f_{v,k+1,1}+f_{v,k+1,0})f_{u,k,0} \end{aligned} \]

submission

posted @ 2025-03-31 22:24  goldspade  阅读(16)  评论(0)    收藏  举报