AtCoder Beginner Contest 416 - E - Development 题解

题意简析

给你一个 \(N\) 个节点 \(M\) 条边的无向图,边有边权。

\(K\) 个机场,其中任意两个相连都有一条边权为 \(T\) 的边。

\(Q\) 次操作:

  1. 加一条边。
  2. 将某个点变为机场。
  3. 询问所有节点对的路径的最短路径和。

思路解析

题目要我们维护一个动态图,最特殊的是有两种边:普通的边和机场。

显然机场更为特殊,如何处理呢?

要我们输出答案的是操作 3。

对于每个操作 3,计算所有城市对 \((i,j)\) 的最小路径时,考虑两种可能:

  • 只通过公路,维护为 \(dis[i][j]\)

  • 通过机场:从 \(i\) 到最近机场,机场间转移,再到 \(j\),维护为 \(air\_dis[i] + T + air\_dis[j]\),其中 \(air\_dis\) 表示各点经由普通公路到机场的最短距离。

就要维护两个数组,\(dis\)\(air\_dis\)


再看剩下的两个操作。

对于每个操作 1:

  • 更新 \(dis\):用新边松弛所有城市对的最短路径。

  • 重新计算每个城市的 \(air\_dis\)

对于每个操作 2:

  • 将城市加入机场集合。

  • 更新该城市的机场距离为 \(0\),更新其他城市的机场距离。

时间复杂度

初始化:Floyd,\(O(N^3)\)

每次操作:

  1. \(O(N^2)\) 用于更新 \(dis\),重新计算 \(air\_dis\)

  2. \(O(N)\) 更新 \(air\_dis\)

  3. \(O(N^2)\) 计算所有城市对的最短路径和。

总复杂度 \(O(N^3 + QN^2)\),由于 \(N \le 500\)\(Q \le 1000\),加上 Atcoder 的神机,可以通过此题。

后记

  1. 同一对城市之间可以建多条道路,同一城市也可以建多个机场。
  2. 十年 OI 一场空,不开 long long 见祖宗。
  3. 还是挺暴力的。
posted @ 2025-07-31 14:07  TangyixiaoQAQ  阅读(11)  评论(0)    收藏  举报