Giao hàng nhanh

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1500 (p) Thời gian: 0.7s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Trung tâm điều phối giao hàng \(S\) cần vận chuyển hàng hóa đến các điểm giao nhận trong thành phố. Có tổng cộng \(N\) điểm (bao gồm cả trung tâm \(S\)), được đánh số từ \(1\) đến \(N\).

Mỗi điểm \(i\) được xác định bởi 3 thông số: tọa độ địa lý \((X_i, Y_i)\) và mật độ dân cư \(P_i\) (\(P_i > 0\)).

Thành phố rất đông đúc, thời gian di chuyển (tính bằng phút) giữa hai điểm \(U\) và \(V\) phụ thuộc vào bình phương khoảng cách địa lý và sự tương tác dân cư giữa hai khu vực. Gọi \(C(U, V)\) là số lượng chữ số của tích \(P_U \times P_V\) trong hệ thập phân. Thời gian di chuyển được tính bằng công thức:

\[W(U, V) = \left[ (X_U - X_V)^2 + (Y_U - Y_V)^2 \right] \times C(U, V)\]

Để đảm bảo an toàn và tránh kẹt xe, xe giao hàng chỉ được phép đi trên tuyến đường trực tiếp nối giữa \(U\) và \(V\) nếu thời gian di chuyển \(W(U, V)\) không vượt quá ngưỡng giới hạn \(K\) phút. Nếu \(W(U, V) > K\), tuyến đường này bị cấm, tài xế buộc phải đi vòng qua các điểm trung gian khác.

Yêu cầu: Hãy tìm thời gian ngắn nhất để di chuyển từ trung tâm \(S\) đến tất cả các điểm giao nhận trong thành phố.

Input

  • Dòng đầu tiên chứa ba số nguyên \(N, S, K\).

    • \(N\): Tổng số địa điểm.
    • \(S\): Chỉ số của trung tâm điều phối (\(1 \le S \le N\)).
    • \(K\): Ngưỡng thời gian giới hạn cho một tuyến đường trực tiếp.
  • \(N\) dòng tiếp theo: Dòng thứ \(i\) chứa ba số nguyên \(X_i, Y_i, P_i\) biểu diễn thông số của điểm \(i\).

Output

  • Ghi ra một dòng duy nhất chứa \(N\) số nguyên, các số cách nhau bởi một khoảng trắng.
  • Số thứ \(i\) thể hiện thời gian ngắn nhất để di chuyển từ trung tâm \(S\) đến điểm \(i\). Nếu không có bất kỳ cách nào để đi đến điểm \(i\), in ra -1.

Example

Test 1

Input
3 1 20 
0 0 5 
2 0 2 
5 0 25 
Output
0 8 26
Giải thích Test ví dụ:
  • Thời gian đi trực tiếp giữa các điểm:
    • Giữa 1 và 2: Tích \(P_1 \times P_2 = 5 \times 2 = 10\) (có 2 chữ số).
      \(W(1, 2) = \left[ (0-2)^2 + (0-0)^2 \right] \times 2 = 4 \times 2 = 8 \le 20\) (Hợp lệ).
    • Giữa 2 và 3: Tích \(P_2 \times P_3 = 2 \times 25 = 50\) (có 2 chữ số).
      \(W(2, 3) = \left[ (2-5)^2 + (0-0)^2 \right] \times 2 = 9 \times 2 = 18 \le 20\) (Hợp lệ).
    • Giữa 1 và 3: Tích \(P_1 \times P_3 = 5 \times 25 = 125\) (có 3 chữ số).
      \(W(1, 3) = \left[ (0-5)^2 + (0-0)^2 \right] \times 3 = 25 \times 3 = 75 > 20\) (Vượt ngưỡng cấm, không có đường trực tiếp).
  • Kết quả:
    • \(S \to 1\): \(0\) phút.
    • \(S \to 2\): Tuyến \(1 \to 2\) tốn \(8\) phút.
    • \(S \to 3\): Phải đi vòng \(1 \to 2 \to 3\). Tổng thời gian = \(8 + 18 = 26\) phút.

Ràng buộc

  • \(1 \le N \le 5000\)
  • \(1 \le S \le N\)
  • \(1 \le K \le 10^{15}\)
  • \(X_i, Y_i \in [-10^6, +10^6]\)
  • \(1 \le P_i \le 10^9\)

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.