$\Huge\text{GPSDUEL Solution}$
----------
:::info
🔗 Links:
📌 Tags: `Graph`
✍ Writer: Hoàng Việt
📄 Content:
[TOC]
:::
---------
## Thuật toán
Gọi $dist[t, u]$ là độ dài đường đi ngắn nhất khi đi từ đỉnh $u$ đến đỉnh $n$ đối với máy GPS thứ $t$.
Tính mảng $dist$ bằng $Dijkstra$ trên hai đồ thị đối với hai máy GPS.
Khi đi từ đỉnh $X$ qua đỉnh $Y$ bằng một cạnh trực tiếp, máy GPS thứ $t$ sẽ phàn nàn khi $dist[t, X] < dist[t, Y] + cost(X, Y)$ với $cost(X, Y)$ là trọng số của cạnh $(X, Y)$ đối với máy GPS thứ $t$.
Tạo một đồ thị mới, giữ nguyên các cạnh cũ nhưng thay đổi trọng số
Trọng số của cạnh $(X, Y)$ là số lượng máy GPS sẽ phàn nàn khi đi từ đỉnh $X$ qua đỉnh $Y$.
Kết quả bài toán là độ dài đường đi ngắn nhất từ đỉnh $1$ đến đỉnh $n$ trên đồ thị mới, tiếp tục sử dụng $Dijkstra$ để tính.
Độ phức tạp $O((n + m) * log(n))$.
------------
Tham khảo code mẫu ở [đây](https://ideone.com/BUs0rF).