Gửi bài giải

Điểm: 0,65 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Dưới lòng đất của VNOI là hệ thống đường ngầm dày đặc gồm ~n~ địa điểm đánh số từ ~1~ đến ~n~. Có ~m~ đoạn đường ngầm, đoạn đường ngầm thứ ~i~ kết nối địa điểm ~u_i~ và ~v_i~ có chi phí là ~c_i~, nghĩa là muốn kích hoạt sử dụng đoạn đường hầm này phải trả chi phí là ~c_i~. Aaron và Hasun là đôi bạn thân đang hoạt động dưới lòng đất này.

Buổi sáng, Aaron cần đi từ ~A~ đến ~B~, và tất nhiên cậu chọn tuyến đường sao cho cần trả ít chi phí nhất.

Buổi chiều, Hasun cần đi từ ~C~ đến ~D~, nhưng may thay, những đoạn đường hầm mà buổi sáng Aaron đã trả chi phí để kích hoạt rồi thì Hasun có thể sử dụng mà không cần trả chi phí nữa.

Hãy hãy tính xem Hasun cần trả chi phí ít nhất là bao nhiêu?

Input:
  • Dòng đầu tiên gồm hai số nguyên ~n, m~.
  • Dòng thứ hai là bốn số nguyên ~A, B, C, D~.
  • ~m~ dòng tiếp theo, mỗi dòng gồm ba số nguyên ~u_i, v_i, c_i~.
  • Dữ liệu đảm bảo từ một địa điểm có thể đi đến mọi địa điểm khác, không có hai đoạn đường hầm nối cùng một cặp địa điểm.
Output:
  • In ra một số nguyên là kết quả của bài toán.
Note
  • Trong mọi test: ~A \neq B, C \neq D~, ~1 \le u_i < v_i \le n~, ~1 \le c_i \le 10^9~.
  • Subtask 1 (~15\%~ số điểm): ~A=C~;
  • Subtask 2 (~15\%~ số điểm): Có duy nhất một tuyến đường từ ~A~ đến ~B~ có giá trị nhỏ nhất;
  • Subtask 3 (~30\%~ số điểm): ~n \le 300~;
  • Subtask 4 (~40\%~ số điểm): ~2 \le n \le 10^5, 1 \le m \le 2 \times 10^5~
Ví dụ

Input:

6 6
1 6 1 4
1 2 5
2 3 1
3 5 1
2 4 3
4 5 2
5 6 1

Output:

2

Giải thích:

  • Chỉ có duy nhất một đường đi ngắn nhất từ ~1~ đến ~6~ là ~1-2-3-5-6~, nên Aaron sẽ sử dụng tuyến đường này.
  • Hasun sẽ chỉ phải trả chi phí thêm đoạn đường hầm ~4-5~ với giá trị ~2~ đến di chuyển từ ~1~ đến ~4~.


Bình luận

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



  • 0
    quannm  đã bình luận lúc 27, Tháng 12, 2025, 15:23

    Ai có solution bài này cho em tham khảo với


    • 0
      TranThienPhuc2657  đã bình luận lúc 27, Tháng 12, 2025, 15:49 sửa 4

      Comment này spoil thuật

      • Đầu tiên bạn Dijkstra ~A~ và ~B~ để có thể xác định các cạnh nào thuộc đường đi ngắn nhất của Aaron.

      • Sau đó bạn Dijkstra Hasun, mình có sử dụng ~1~ nhận xét là: hai đường đi ngắn nhất chỉ giao nhau tại ~1~ đoạn liên tiếp, khi này mình sẽ có thể thêm chiều hai cho Dijkstra biểu diễn trạng thái chưa giao, đang giao và đã giao giữa đường đi của Hasun với đường đi ngắn nhất của Aaron.

      • Lưu ý: Dijkstra Hasun ở đây là mình Dijkstra cả ~C~ và ~D~ và lấy ~\min~ (về lí do mình không hiểu tại sao làm như thế này mới đúng mà không phải Dijkstra ~1~ đỉnh là đã đủ đúng, cái này mình xin nhường lại cho các bạn khác giải thích giúp mình).

      • Code tham khảo: ideone