修改文章内容

This commit is contained in:
ember 2025-07-27 12:44:03 +08:00
parent 4bed00e38a
commit 1766ef43cd

View File

@ -69,10 +69,10 @@ math: true
1. 首先,我们使用并查集的 `find` 操作检查 `s``t` 是否在同一个连通分量中。
- 如果 `find(s) == find(t)`,说明它们在同一个免费交通网络内,可以直接到达,费用为 0。
2. 如果它们不在同一个连通分量中,费用就来自于在圆弧上从一个连通分量“跳”到另一个连通分量的次数。这可以转化为一个在**“分量图”**上的最短路问题。
- **构建分量图**图中的每个节点代表一个连通分量。
- **分量图的边**如果圆弧上相邻的两个点 `i``i+1` 属于不同的连通分量(即 `find(i) != find(i+1)`),我们就在这两个分量对应的节点之间连一条边,权重为 1。
- **求解**问题就变成了,在分量图上,从 `s` 所在的分量走到 `t` 所在的分量,最少需要经过几条边。这是一个典型的无权图最短路问题,可以使用**广度优先搜索 (BFS)** 来解决。
2. 如果它们不在同一个连通分量中,费用就来自于在圆弧上从一个连通分量“跳”到另一个连通分量的次数。这可以转化为一个在 **“分量图”** 上的最短路问题。
- 图中的每个节点代表一个连通分量。
- 如果圆弧上相邻的两个点 `i``i+1` 属于不同的连通分量(即 `find(i) != find(i+1)`),我们就在这两个分量对应的节点之间连一条边,权重为 1。
- 问题就变成了,在分量图上,从 `s` 所在的分量走到 `t` 所在的分量,最少需要经过几条边。这是一个典型的无权图最短路问题,可以使用**BFS** 来解决。
# C++ 代码