Rikka with Intersections of Paths ICPC 2018 Xuzhou R

[ICPC 2018 Xuzhou R] Rikka with Intersections of Paths

题目链接: [ICPC 2018 Xuzhou R] Rikka with Intersections of Paths 。

题目描述:

有 nn 个点的树, mm 条路径,求选出 kk 个路径满足有至少一个公共点的方案数,对 109+710^9+7 取模。

n,m,k≤3×105n,m,k\le 3\times 10^5 。

一眼树上差分统计每一个点被多少路径覆盖。记为 cnticnt_i 。

然而直接计算 ∑(cntik)\sum \binom{cnt_i}{k} 有问题,因为可能有些路径拥有超过 11 个公共点,这些路径就会在他们的所有公共点处被重复统计。

注意到以下性质:

一个路径 x,yx,y 经过 ii 意味着 lca(x,y)lca(x,y) 为 ii 的祖先或 ii 。

也就是说,所有经过 ii 的路径的 lcalca 必然为 ii 的祖先或 ii 。于是一个基本的容斥想法形成:

我们可以对于每一个 ii ,统计“至少有一个路径的 lcalca 为 ii 的选 kk 条经过 ii 的路径的方案数”,这样算是不重复不遗漏的,因为每一种方案一定仅会在他们的所有 lcalca 中深度最大处被统计。

具体来说就是设 cnt2icnt2_i 表示 ii 为多少路径的 lcalca 。则答案可以表示为 ∑(cntik)−(cnti−cnt2ik)\sum \binom{cnt_i}{k}-\binom{cnt_i-cnt2_i}{k} 。

代码不放了。