读题,只经过困难值小于等于x的路径,容易想到用Kruskal重构树:又要查询第k高的山峰,我们选择用主席树求解. 先做一棵重构树,跑一遍dfs,重构树中每一个非叶子节点对应一段区间,我们开range[x][0/1]数组来履行此职责,表示该节点维护的最左(最右)的叶子节点.每跑到一个叶子节点就把他插入主席树中.然后就是基本操作了,倍增找到我们想要的点,用该点的range来在主席树中查询即可. 按题目的困难值要求,显然重构树是个大根堆,用v数组存困难值. 下面的两个代码,一个是参考代码,注释很详细,…