给一张图(不一定联通),每条边有边权,Q次询问,查询$(u,v)$两个节点中所有路径中最小值最大的值。
题目有一种想让人二分欲望。但是Q次询问,二分很难处理。
根据Kruskal的思想,如果我们想让两个点路径中最小值最大,我们就不要去走最大生成树以外的点,既然边权更大的边可以让两点联通,我们就不应该走边权小的点,让答案变劣。
所以先跑最大生成树,建新图。
现在就得到了一个森林(原图不一定联通),对每棵树进行LCA预处理,处理出父亲和路径中最小值。
然后就是$O(1)$的查询了。
1 |
|
码量有点大,但是确实值得思考一开始最大生成树的性质。