luoguP4197:Peaks(Kruskal重构树+主席树)或者(点分树+离线)

题意:有N座山,M条道路。山有山高,路有困难值(即点权和边权)。现在Q次询问,每次给出(v,p),让求从v出发,只能结果边权<=p的边,问能够到达的山中,第K高的高度(从大到小排序)。

思路:显然,最小化最大边权,需要先得到生成树,三种思路。

第一种:离线+启发式合并,这里先不管。

第二种:Kruskal重构树+主席树。 我们知道LCA处的点权路径边权就是极值,那么我们找到最远的祖先x,满足w[x]<=p,得到v的子树都是可以到达的点,现在问题就是在子树找第k大,主席树即可。 O(NlogN)

第三种:估计还没啥人是这个做法做的,毕竟相比第二种麻烦一点。先得到最小生成树,然后得到点分树。 然后找最远的祖先x,满足原树上maxval(v->x)<=p;然后离线求,把节点和询问排序,线段树就可以搞定了。O(Nlog^2N)这个做法可以参考:luogu5311。

 

It is your time to fight!
posted @ 2019-09-29 17:06  nimphy  阅读(191)  评论(0编辑  收藏  举报