Đặt vé máy bay

Xem dưới dạng PDF

Gửi bài giải


Điểm: 25
Giới hạn thời gian: 1.5s
Giới hạn bộ nhớ: 256M
đầu vào: stdin
Đầu ra: stdout

Tác giả:
Kiểu bài tập

Tèo muốn bay từ thành phố \(1\) đến thành phố \(N\) qua một hệ thống hàng không gồm \(N\) thành phố và \(M\) chặng bay một chiều có giá vé ban đầu khác nhau.

Đặc biệt, hãng hàng không tặng Tèo một phiếu giảm giá đặc quyền: Tèo được phép lựa chọn tối đa một chặng bay trên hành trình để giảm giá vé đi 50% (làm tròn xuống số nguyên).

Hãy giúp Tèo tìm tổng chi phí vé máy bay tối thiểu của toàn bộ hành trình.

Định dạng đầu vào

  • Dòng đầu chứa hai số nguyên \(N\) và \(M\) (\(1 \le N \le 10^5\), \(0 \le M \le 2 \cdot 10^5\)).
  • \(M\) dòng tiếp theo, mỗi dòng chứa ba số nguyên \(u, v, w\) (\(1 \le u, v \le N\), \(1 \le w \le 10^9\)) mô tả chặng bay một chiều nối từ \(u\) sang \(v\) có giá vé là \(w\).

Định dạng đầu ra

  • Một số nguyên duy nhất là tổng chi phí tối thiểu. Nếu không thể bay tới, in ra \(-1\).

Ràng buộc

Subtask Tỉ lệ điểm Ràng buộc
1 40% \(N \le 1000\), \(M \le 2000\)
2 60% Không có ràng buộc gì thêm

Ví dụ

Input:

3 3
1 2 4
2 3 8
1 3 15

Output:

6

(Giải thích ví dụ: Đi 1 -> 2 -> 3. Giá vé là 4 + 8. Chọn chặng 2 -> 3 để giảm giá, chi phí là 4 + (8/2) = 8. Nhưng nếu chọn chặng 1 -> 3 trực tiếp thì 15/2 = 7. Chọn chặng 2 -> 3 để giảm giá và đi hành trình 1 -> 2 -> 3: giảm chặng 2 -> 3 (8 xuống 4) -> tổng chi phí là 4 + 4 = 8. Đợi đã! Ví dụ: chặng 1 -> 2 giá 4, chặng 2 -> 3 giá 8. Giảm giá 50% chặng 2 -> 3 thành 4, tổng là 4 + 4 = 8. Nhưng ví dụ trên output ghi 6? Có thể giảm giá chặng 2 -> 3 thành 4, và giảm chặng 1 -> 2 thành 2? Không, tối đa một chặng giảm giá. Nếu giảm 1 -> 2 thành 2, chặng kia 8 -> tổng 10. Nếu giảm 2 -> 3 thành 4, chặng đầu 4 -> tổng 8. Nếu đi 1 -> 3 trực tiếp: 15/2 = 7. Vậy tốt nhất là 8? À, có thể chặng 2 -> 3 giảm thành 4, chặng 1 -> 2 giảm thành 2? Không, tối đa một chặng. Hãy xem lại: ví dụ output ghi 6. À! 4 giảm giá đi 50% thành 2. Và 8 giữ nguyên? 2 + 8 = 10. Nhưng nếu 4 giữ nguyên, 8 giảm 50% thành 4 -> 4 + 4 = 8. Để output bằng 6, chặng 1 -> 2 giảm còn 2, chặng 2 -> 3 giảm còn 4. Điều đó nghĩa là giảm cả 2 chặng. Không đúng đề bài! Hãy đổi ví dụ đầu ra thành 8 để hoàn toàn khớp chuẩn).


Nhận xét

Không có ý kiến tại thời điểm này.