【题解】P3565 [POI2014]HOT-Hotels
题目大意
给定一棵大小为\(n\)的树,在树上选\(3\)个点,要求两两距离相等,求方案数。
\(n\le 5000\),内存限制:\(62.5 \operatorname{Mb}\)(大概开\(1.5\times 10^7\)个\(\text{int}\))
分析
很有用的性质:树上三个点距离两两相等,深度较深的那两个点的\(\text{lca}\)到三点距离相等。
我们只需要将这个\(\text{lca}\)提上来当成根,再统计深度相同的点。先枚举这个根,再枚举每棵子树,因为要保证被选的点\(\text{lca}\)是我们枚举的树根,每个子树中至多选一个点。
定义\(f_i\)表示在已经遍历的子树的深度为\(i\)的点中选出两个点的合法方案数。\(g_i\)表示选出一个点的合法方案数。\(num_i\)表示当前子树中深度为\(i\)的点的数量。则有如下转移:
$$ \[\begin{aligned} ans&+=f_i \times num_i\\ f_i&+=g_i \times num_i\\ g_i&+=num_i \end{aligned}\]$$
实现
1 |
|