ABC477 E - Wheel Distance
車輪の距離
考え方
グラフの形は、タイトルのように車輪の形である。
つまり、中心に頂点 $N+1$ があり、残りの $N$ 点が円周上にあると思うことができる。
この場合、円周上の $2$ 点 $P,Q$ 間の最短経路は、以下の $3$ つのいずれかである。
- $P$ から $Q$ まで、円周を時計周りに移動する
- $P$ から $Q$ まで、円周を反時計周りに移動する
- $P$ から中心までの最短経路を通った後、中心から $Q$ までの最短経路を通る
上の $2$ つは、円周上の距離の累積和を事前に求めておけば、$O(1)$ で処理できる。
最後のものは、中心から各点までの最短距離をDijkstra法で求めておけば、やはり $O(1)$ で処理できる。
また、片方が中心だった場合も、中心から各点までの最短距離を求めておけばそれを答えるだけ。
ということで、累積和とDijkstra法の事前処理のもと、どんなクエリでも $O(1)$ で処理できる。
事前処理分も含めて、全体として $O(N\log N+Q)$ である。
入力例1での動作
入力を受け取る。
n: 5
q: 3
a: {1, 3, 4, 2, 5}
b: {5, 2, 4, 3, 7}
queries:
2 5
5 6
1 4
円周上の辺の距離 a の累積和は、次のようになる。
sum: {0, 1, 4, 8, 10, 15}
次に、中心の頂点 $6$ から Dijkstra法を行う。
各頂点までの最短距離と、その最短経路の一例は次のようになる。
| 頂点 | $1$ | $2$ | $3$ | $4$ | $5$ | $6$ |
|---|---|---|---|---|---|---|
| 最短距離 | $3$ | $2$ | $4$ | $3$ | $5$ | $0$ |
| 最短経路の一例 | $6\to2\to1$ | $6\to2$ | $6\to3$ | $6\to4$ | $6\to4\to5$ | $6$ |
この $2$ つの前処理を使って、各クエリの候補を求める。
| クエリ | 時計回り | 反時計回り | 中心経由・中心まで | 最短距離 |
|---|---|---|---|---|
2 5 |
$10-1=9$ | $(15-10)+1=6$ | $2+5=7$ | $6$ |
5 6 |
- | - | $5$ | $5$ |
1 4 |
$8-0=8$ | $(15-8)+0=7$ | $3+3=6$ | $6$ |
したがって、$3$ つのクエリの答えは順に $6,5,6$ となる。
注意点
円周上の距離の累積和や最短距離は、int 型からはみ出る可能性がある。
long long 型を用いること。
別解
特になし。