题意:有N座山,M条道路。山有山高,路有困难值(即点权和边权)。如今Q次询问,每次给出(v,p),让求从v出发,只能结果边权<=p的边,问可以到达的山中,第K高的高度(从大到小排序)。排序
思路:显然,最小化最大边权,须要先获得生成树,三种思路。get
第一种:离线+启发式合并,这里先无论。重构
第二种:Kruskal重构树+主席树。 咱们知道LCA处的点权路径边权就是极值,那么咱们找到最远的祖先x,知足w[x]<=p,获得v的子树都是能够到达的点,如今问题就是在子树找第k大,主席树便可。 O(NlogN)生成
第三种:估计还没啥人是这个作法作的,毕竟相比第二种麻烦一点。先获得最小生成树,而后获得点分树。 而后找最远的祖先x,知足原树上maxval(v->x)<=p;而后离线求,把节点和询问排序,线段树就能够搞定了。O(Nlog^2N)这个作法能够参考:luogu5311。ps