DHBB 2026 - DX32 - 11 - Đường đi ngắn nhất

Xem dạng PDF

Gửi bài giải

Điểm: 60,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 1G
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Output Only, Pascal, PyPy, Python, Scratch, TEXT

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài

Cho mạng lưới giao thông gồm ~n~ nút giao thông và ~m~ đường nối hai chiều, nút ~i~ có vận tốc giới hạn ~X_i~ (mét/giây). Con đường ~j~ nối hai nút giao thông ~a_j~ và ~b_j~ có độ dài ~l_j~ (mét) và vận tốc giới hạn ~v_j~ (mét/giây). Một phương tiện di chuyển có vận tốc tối đa ~V~ (mét/giây) và gia tốc giới hạn ~A~ (~\text{mét}/\text{giây}^2~).

Quy tắc vận tốc:

  • Khi phương tiện đang di chuyển trên con đường thứ ~j~, phương tiện có thể tăng tốc, nhưng vận tốc không được tăng quá ~\min(V, v_j)~;

  • Khi phương tiện đi vào một nút giao thông thứ ~i~, phương tiện buộc phải giảm vận tốc về ~X_i~ nếu đang có vận tốc cao hơn. Đặc biệt, khi ~X_i = 0~ phương tiện cần dừng lại hoàn toàn trước khi được phép đi tiếp vào một đường nối nào đó.

  • Khi phương tiện muốn đi từ một nút giao thông ~u~ vào con đường ~j~, phương tiện buộc phải giảm vận tốc về còn ~v_j~ nếu đang có vận tốc lớn hơn.

  • Thời gian dành cho cả hai trường hợp giảm tốc xem như bằng ~0~.

  • Sau khi phương tiện đã giảm tốc cho hợp lý thì được phép đi vào đường nối và có thể bắt đầu tăng tốc.

Yêu cầu: Tính thời gian nhỏ nhất để đi từ nút ~1~ (vận tốc đầu bằng ~0~) đến mọi nút khác bằng phương tiện này.

Nhắc lại định nghĩa vận tốc và gia tốc:

  • Một phương tiện di chuyển với vận tốc ~v~ (mét/giây) đi được khoảng cách là ~v \cdot t~ (mét) trong thời gian ~t~ (giây).

  • Một phương tiện đang di chuyển với vận tốc ~v~ (mét/giây) và có gia tốc giới hạn là ~A~ (~\text{mét}/\text{giây}^2~) thì có thể tăng vận tốc thành tối đa là ~v + At~ (mét/giây) trong thời gian ~t~ (giây) (không tính đến các vận tốc giới hạn).

  • Giả sử một phương tiện đang di chuyển với vận tốc ~v~ (mét/giây) và tiến hành tăng tốc đều với gia tốc là ~a~ (~\text{mét}/\text{giây}^2~) thì sau ~t~ (giây) phương tiện này có vận tốc là ~v + at~ (mét/giây) và khoảng cách đi được từ khi bắt đầu tăng tốc là ~vt + \frac{at^2}{2}~ (mét).

Input

  • Dòng đầu chứa ~4~ số nguyên ~n, m, V, A~ ~(2 \le n, m \le 1024; 1 \le V, A \le 32)~.

  • Dòng hai chứa ~n~ số nguyên ~X_1, X_2, \dots, X_n~ là vận tốc giới hạn của các nút giao thông.

  • ~m~ dòng tiếp theo, dòng thứ ~j~ chứa ~4~ số nguyên ~a_j, b_j, l_j, v_j~ ~(1 \le a_j, b_j \le n; 1 \le l_j \le 3 \cdot 10^7; 1 \le v_j \le 32)~ biểu diễn một con đường nối giữa hai nút giao thông.

Output

  • In ra ~n~ số thực ~d_1, d_2, \dots, d_n~ là thời gian tối thiểu để đi từ nút ~1~ đến từng nút giao thông. Nếu không có đường đi thì ~d_i = -1~, sai số cho phép ~10^{-6}~.

Scoring

Subtask Điểm Ràng buộc
1 ~20\%~ Có chính xác ~n-1~ đường nối, đường nối thứ ~i~ nối giữa hai nút giao thông ~i~ và ~i+1~.
2 ~20\%~ Có chính xác ~n-1~ đường nối, có thể đi từ nút giao thông ~1~ đến mọi nút khác mà chỉ dùng các đường nối.
3 ~20\%~ ~X_i = 0~ với mọi nút giao thông.
4 ~20\%~ ~X_i \le 1~ với mọi nút giao thông.
5 ~20\%~ Không có giới hạn gì thêm

Sample Input 1

4 3 10 1
1 5 10 15
1 2 8 10
2 3 100 20
3 4 1250 8

Sample Output 1

0.000000 4.000000 15.800000 172.050000

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.