trang chủ / đề bài / voi17_metro

Tàu điện ngầm

Đề bài

Mô tả

Pira là một thành phố nổi tiếng với hệ thống tàu điện ngầm lâu đời và phức tạp. Thành phố có n ga tàu, được đánh số từ 1 đến n và m tuyến đường có số hiệu từ 1 đến m. Tuyến đường có số hiệu k được biểu diễn bởi cặp có thứ tự gồm hai chỉ số của hai nhà ga (uk,vk) cho biết tuyến đường này cho phép đi từ ga uk đến ga vk. Khi đó ta nói tuyến đường số hiệu k là đi khỏi ga uk và đi đến ga vk. Thời gian cần thiết để mỗi chuyến tàu đi theo tuyến đường số hiệu k từ ga uk đến ga vk là tk đơn vị thời gian.

Mỗi ga có các bến tàu đến tương ứng với mỗi tuyến đường đi đến nó và các bến tàu đi tương ứng với mỗi tuyến đường đi khỏi nó. Khi xây dựng hệ thống này, lãnh đạo thành phố đã nhờ các nhà khoa học tính toán và sắp xếp các vị trí đặt các bến tàu đến và các bến tàu đi trong mỗi ga sao cho hành khách dễ dàng di chuyển và tính được thời gian di chuyển theo cách lựa chọn của mình. Các nhà khoa học đã sắp xếp vị trí các bến tàu đến và đi ở mỗi ga sao cho thời gian di chuyển từ bến tàu đến của tuyến đường số hiệu i đến bến tàu đi của tuyến đường số hiệu j được tính bởi hàm F(i,j)=i×δ+j, trong đó δ là một thông số mà các nhà khoa học đưa vào để hàm F(i,j) có thể thay đổi linh hoạt tuỳ thời điểm. Nói một cách đơn giản, nếu trên đường di chuyển hành khách theo tuyến đường i đi đến một ga nào đó và theo tuyến đường j đi khỏi ga này thì sẽ mất F(i,j) đơn vị thời gian để thực hiện việc chuyển tuyến đường. Do đó ta gọi F(i,j) là hàm chi phí thời gian chuyển tuyến để chuyển từ tuyến đường i sang tuyến đường j.

Dựa vào thông tin về thời gian di chuyển trên các tuyến đường và hàm chi phí thời gian chuyển tuyến F(i,j), hành khách có thể tính được thời gian di chuyển từ một ga đến bất kỳ ga nào còn lại trong hệ thống là bằng tổng thời gian di chuyển trên các tuyến đường giữa các ga và thời gian chuyển tuyến ở mỗi ga trung gian.

Yêu cầu: Cho biết vị trí hai ga u và v trong hệ thống, hãy tính thời gian ít nhất để di chuyển từ ga u đến ga v.

Dữ liệu vào

  • Dòng thứ nhất ghi các số nguyên dương n, m, u, v và số nguyên không âm δ, trong đó δ (δ≤100) là thông số xác định hàm chi phí chuyển tuyến;
  • Dòng thứ k trong số m dòng tiếp theo chứa ba số nguyên dương uk, vk và tk mô tả thông tin về tuyến đường số hiệu k cho biết tuyến đường này cho phép di chuyển từ ga uk đến ga vk và tk (tk≤109) là thời gian di chuyển qua nó, k=1,2,…,m.

Dữ liệu đảm bảo có không quá một tuyến đường đi từ ga p đến ga q với mọi p và q và không có tuyến đường nào nối một ga với chính nó. Các số trên cùng dòng được ghi cách nhau bởi dấu cách.

Dữ liệu ra

In ra một số nguyên là thời gian di chuyển tìm được. Nếu không có cách di chuyển thì ghi ra −1.

Ràng buộc

  • 1≤n,m≤105;
  • 0≤δ≤100;
  • 1≤tk≤109.

Subtasks

  • Subtask 1 (40% số test, 40% số điểm): n≤103, m≤105, δ=0;
  • Subtask 2 (30% số test, 30% số điểm): n≤105, m≤105, δ=0;
  • Subtask 3 (30% số test, 30% số điểm): n≤10000, m≤50000, δ≥1.

Ví dụ

Input Output Giải thích
5 8 1 5 1
1 2 12
1 3 13
1 4 14
4 2 14
2 3 12
2 5 12
4 5 15
3 5 16
31 Hành khách đi từ ga 1 đến ga 2 theo tuyến đường số hiệu 1 mất 12 đơn vị thời gian, chuyển từ bến tàu đến của tuyến đường số hiệu 1 sang bến tàu đi của tuyến đường số hiệu 6 ở ga 2 mất 1×1+6=7 đơn vị thời gian và đi từ ga 2 đến ga 5 mất 12 đơn vị thời gian. Tổng cộng: 12+7+12=31.
5 8 1 5 0
1 2 12
1 3 13
1 4 14
4 2 14
2 3 12
2 5 12
4 5 15
3 5 16
30 Vẫn với ví dụ trên nhưng δ=0 (có trong ghi chú của đề gốc): cách đi với thời gian ít nhất từ ga 1 đến ga 5 là 12+6+12=30.

Bình luận

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

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0