题解:P3714 [BJOI2017] 树的难题

link

要处理所有的简单路径,因而考虑淀粉质点分治。设当前的分治中心为 r,我们显然可以简单 DFS 出所有以 r 为端点的路径的权值,这样只需要在 r 处拼接两条路径即可算出答案。

由于同一个颜色连续段只贡献一次权值,因而我们考虑把 r 的邻边中颜色相同的放在一起处理。开两棵以路径长度为下标的线段树,分别存储已经处理过的颜色和当前正在处理的颜色。处理每条邻边时,先计算经过这条边的链和已经有的链相连的贡献,处理完当前儿子后将其加入第二棵线段树。将一种颜色处理完后,将这种颜色的所有链加入第一棵线段树并清空第二棵线段树即可。时间复杂度为 O(nlog22n)

清空第二棵线段树时,要用遍历所有链来清空,我清空前 4 倍的最长链长度会 TLE 一个点,比较玄学。

另外我最开始忘了继续分治了,只分治了一次,居然在锣鼓获得了 60 分,比较逆天。

posted @   FugiPig  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示