例如下图:
-[](./graph/mst5.png)
+ [](./graph/mst5.png)
-1 到 4 的最小瓶颈路显然有以下两条: 1-2-3-4。 1-3-4。
+1 到 4 的最小瓶颈路显然有以下两条:1-2-3-4。1-3-4。
-但是, 1-2 不会出现在任意一种最小生成树上。
+但是,1-2 不会出现在任意一种最小生成树上。
### 应用
由于最小瓶颈路不唯一,一般情况下会询问最小瓶颈路上的最大边权。
-也就是说,我们需要求最小生成树链上的 max 。
+也就是说,我们需要求最小生成树链上的 max。
倍增,树剖都可以解决这里不再展开。
在跑 kruscal 的过程中我们会从小到大加入若干条边。现在我们仍然按照这个顺序。
-首先新建 n 个集合,每个集合恰有一个节点,点权为 $0$。
+首先新建 n 个集合,每个集合恰有一个节点,点权为 $0$ 。
每一次加边会合并两个集合,我们可以新建一个点,点权为加入边的边权,同时将两个集合的根节点分别设为新建点的左儿子和右儿子。然后我们将两个集合和新建点合并成一个集合。将新建点设为根。
我们在 kruscal 重构树上找到 $x$ 到根的路径上权值 $\leq val$ 的最浅的节点。显然这就是所有满足条件的节点所在的子树的根节点。
!!! note "[CC MXMN](https://www.codechef.com/JULY19A/problems/MXMN)"
- 题目大意:给定两张 $n$ 个点 $2n$ 条边的联通无向带边权图,假设分别为G1,G2。
+ 题目大意:给定两张 $n$ 个点 $2n$ 条边的联通无向带边权图,假设分别为 G1,G2。
询问所有点对 $(i,j),(1 \leq i < j \leq n)$ 在两张图上的最小瓶颈路的最大边权的乘积的和。
-
+
$n \leq 100000$
我们首先求出两张图的最小生成树,并根据最小生成树构造 kruscal 重构树。
现在我们将问题变成:
> 给定一棵树
-> 多次询问,每次询问给定点集$S$和这个点集内的点权$v$。
-> 询问$\sum_{1 \leq i < j \leq |S|} \max(v_i,v_j) \times \max(edge_k|k 在 S_i 到 S_j的路径上)$
+> 多次询问,每次询问给定点集 $S$ 和这个点集内的点权 $v$ 。
+> 询问 $\sum_{1 \leq i < j \leq |S|} \max(v_i,v_j) \times \max(edge_k|k 在 S_i 到 S_j的路径上)$
此时我们可以直接建出第二张图的最小生成树的 kruscal 重构树。
也就是说,单次 $n$ 个节点的询问我们可以在 $O(n \log n)$ 的时间复杂度内解决。
-总时间复杂度 $O(n \log^2 n)$。
+总时间复杂度 $O(n \log^2 n)$ 。