题意简述
给定 $n$ 个点 $m$ 条边的无向连通图,边带权。$q$ 次询问,每次问你 $u,v$ 之间的所有路径中,边权最大值最小是多少。
$n\le 7\times10^4,m\le 10^5,q\le 10^7$
(询问会用种子生成方式给你,具体见原题,不会影响输入时间)
思路
首先跑一遍 Kruskal
最小生成树的重构树,$u,v$ 的最小瓶颈路就是 $u,v$ 的路径最大值。
然后在 Kruskal
中,$u,v$ 路径的最大值,就是第一次 (当然,也是唯一一次)把 $u,v$ 两个点从不连通变成联通的那条边的边权。
那么我们在合并 $u,v$ 的时候,就可以开一个临时的点 $x$ ,把 $u$ 和 $v$ 都接到 $x$ 下面,变成 $x$ 的儿子。然后 $x$ 的点权,就是 $u$ 到 $v$ 的边权。
那这样求生成树之后, $u$ 到 $v$ 的路径最大值,就相当于 $u,v$ 的 $LCA$ 的点权。
用 $ST$ 表 $O(1)$ 求 $LCA$ 即可。
代码
1 |
|