P10064 [SNOI2024] 公交线路

显然只需要考虑叶子结点的连边情况,设一个结点 \(u\) 仅经过一条路径能到达的点的集合为 \(S_x\),则条件等价于对于任意两个叶子结点 \(x, y\)\(S_x\)\(S_y\) 有交.

由树的性质,所有 \(S_x\) 的交集非空(否则存在环),于是交集为一个连通块,上点边容斥.

于是问题转化为两部分:求所有 \(S_x\) 都包含一个点 \(u\) 的方案数;求所有 \(S_x\) 都包含一条边的两个端点 \(u, fa_u\) 的方案数.

考虑容斥,第一部分记录 \(f_i\) 表示钦定 \(i\) 个叶子的 \(S_x\) 不包含 \(u\) 的方案数.

考虑将 \(u\) 的子树 \(v\) 并入 \(u\) 的转移方程.

\[f_{i+j}=f_i\binom{lef_v}{j}2^{(siz_u-i)(siz_v-j)} \]

加入外子树时不必容斥,加完后统计一下答案即可,时间复杂度和树形背包一样,\(\mathcal{O}(n^2)\).

第二部分是第一部分的简单版,略过.

posted @ 2024-04-12 18:18  wiki0922  阅读(10)  评论(0编辑  收藏  举报