2025.04.12 CW 模拟赛 B. 让他们连通
B. 让他们连通
题目描述
小明有一幅 \(n\) 个点的无向图,一开始没有边。
一共 \(m\) 秒,第 \(i\) 秒,一条边 \((x_i, y_i)\) 诞生了。
小明还有 \(q\) 个问题,第 \(i\) 个问题是,编号在区间 \([l_i, r_i]\) 内的所有点,什么时候连通。
请给小明回答一下这个问题。
思路
在考场上第一眼看到题目想到的是可持久化并查集, 但是常数过大跑不过去.
我们钦定图中每条边的权值为它的加入时间 \(t\). 不难发现两点连通的最小时间就是从 \(u\) 到 \(v\) 所有简单路径上最大边权的最小值 \(\to\) 最小生成树上两个点之间简单路径上的最大值 \(\to\) \(\text{Kruskal}\) 重构树上两点之间 \(\text{LCA}\) 的点权.
对于一段区间 \([l, r]\) 也是相同的, 我们求出所有点对 \((i, i + 1), i \in [l, r)\) 在重构树上的 \(\text{LCA}\) 的点权, 最后取一个 \(\max\) 就行了.
所以我们就可以将所有边以加入时间排序, 然后建出 \(\text{Kruskal}\) 重构树求 \(\text{LCA}\) 即可.
后话
这其实相当于对问题进行转化, 将「第 \(i\) 秒, 一条边 \((x_i, y_i)\) 诞生了」转化成了「边 \((x_i, y_i)\) 的边权为 \(i\)」, 「两点连通的最小时间」转化成「最小生成树上两个点之间简单路径上的最大值」, 从而使用重构树进行解决.

浙公网安备 33010602011771号