2020.03.22日常总结

洛谷P1395     会议\color{green}{\text{洛谷P1395\ \ \ \ \ 会议}}


【题意】:\color{blue}{\text{【题意】:}}

  • 给定一棵无根树,定义 uuvv 的距离为简单路径 (u,v)(u,v) 上的边的数量。我们把它记为 Tu,vT_{u,v}
  • 定义以 uu 为该无根树时的花费为 i=1nTu,i\sum\limits_{i=1}^{n} T_{u,i}。即所有点到根 uu 的距离和。我们把它记为 GuG_u
  • 求一个点 uu,使得 GuG_u 最小。输出 uuGuG_u。如有多解,则输出最小的 uu
  • 对于 100%100 \% 的数据,1n5×1041\leq n \leq 5 \times 10^4

【思路】:\color{blue}{\text{【思路】:}}

对于无根树类的题目,我们可以先指定一个点当作根。然后再考虑。

具体地,我们先求出以 11 为根时以每个点 uu 为根的子树的大小 fuf_uG1G_1

考虑根从点 uu 转移到它的一个儿子 vv 时总花费的变化量。可以发现,有等量关系 Gv=Gufv+(nfv)G_v=G_u - f_v + (n - f_v)

什么意思?即 vv 的所有儿子到根的距离都减少了 11,但是所有不是 vv 的儿子到根的距离都增加了 11。我们可以根据这个来算出所有的 GG。可以配图理解 (图丑请原谅)

2020.03.22日常总结

总的时间复杂度为 O(n)O(n)。可以通过更大的数据(比如 1×1061 \times 10^6)。


【代码】:\color{blue}{\text{【代码】:}}

2020.03.22日常总结
2020.03.22日常总结