題意:有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