洛谷3714暨bzoj4860,BJOI2017树的难题

点分治好题啊。
首先,我用前向星,将边以出发点为第一关键字,边的颜色编号为第二关键字排序。点分治之后,对于当前点v,我按照排序后的边的顺序,顺次处理v的子树。对于每棵子树a,记该子树连向父亲v的边 位 Ea ,则a 对答案的贡献有两种:
1.另一颗子树b,且 Ea 不等于 Eb 。那么我们对于所有这种子树b中的点u,按深度建立一颗线段树,维护以u到v的路径的最值,这样每次直接查询即可。
2.1.另一颗子树b,且 Ea 等于 Eb 。与1类似,但最后求答案时要减去 Ea 的颜色权值
具体实现时,我同时维护两棵线段树,一个保存情况2的线段树,另一个保存情况1的线段树,每当处理完一种颜色,就把两棵线段树合并(这竟是本渣第一次写线段树合并)
两个疑问:
1.我的代码,大家可以发现,我的代码中,maxn是到4*10^5,远超题目范围。但如果我的maxn只开到2*10^5,会wrong answer,哪位大爷愿意帮我解释一下(本蒟蒻被这东西浪费了一两个小时,后来手动随机改代码,不小心AC了,并不知道到是为什么)
2.据说这题有奇快无比的单调队列做法,我并不会啊,哪位大爷愿意跟我说明一下,在下万分感谢。

你可能感兴趣的:(洛谷3714暨bzoj4860,BJOI2017树的难题)