Editorial for Xây dựng đồ thị
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Subtask 1: Ta đơn giản xây dựng các cạnh với mỗi truy vấn và sử dụng các thuật toán tìm đường đi ngắn nhất, có thể sử dụng Floyd-Washall.
Độ phức tạp:
Subtask 2: Với điều kiện , số cạnh tối đa của đồ thị là . Tiến hành xây dựng các cạnh của đồ thị và sử dụng thuật toán Dijkstra kết hợp Hàng đợi ưu tiên để tìm kết quả.
Độ phức tạp:
Subtask 3: Thay vì xây dựng trực tiếp các cạnh của đồ thị, ta có thể tìm độ dài đường đi ngắn nhất từ đỉnh đến các đỉnh khác như sau:
- Sắp xếp các truy vấn theo thứ tự tăng dần giá trị .
- Duyệt qua các truy vấn, với truy vấn thứ , tìm độ dài đường đi ngắn nhất từ đỉnh đến đỉnh , ta gọi giá trị này là , sau đó tiến hành cập nhật độ dài đường đi ngắn nhất của các đỉnh () với giá trị .
- Bài toán trở thành việc truy vấn giá trị tại một vị trí và cập nhật giá trị trên một đoạn các vị trí liên tiếp. Có thể sử dụng cấu trúc dữ liệu Segment Tree để giải quyết.
Độ phức tạp:
Subtask 4: Ta không thể xây dựng cây truy vấn cho tối đa vị trí. Thay vào đó, ta chỉ cần quan tâm đến các đỉnh , của các truy vấn, hai đỉnh và , tạm gọi là các đỉnh quan trọng. Tiến hành lưu và sắp xếp các đỉnh quan trọng. Với mỗi truy vấn, sử dụng tìm kiếm nhị phân để xác định các vị trí cần truy vấn và cập nhật.
Độ phức tạp:
Comments