trang chủ / đề bài / dhbb15_11_freebus

Vé xe miễn phí

Đề bài

Mô tả

Tham gia trò chơi nhảy lò cò, thật may mắn, Khuê đã giành giải nhất của cuộc thi. Phần thưởng mà Khuê nhận được là k vé xe buýt miễn phí để đi thăm quan thành phố Hạ Long. Mỗi vé xe chỉ được sử dụng một lần và có thể sử dụng cho bất kỳ tuyến xe buýt nào trong thành phố. Thành phố có n nút giao thông được đánh số từ 1 đến n và m tuyến xe buýt hai chiều. Mỗi cặp nút giao thông i,j có không quá một tuyến xe buýt hai chiều, nếu có thì để đi từ nút i đến nút j (hoặc từ nút j đến nút i) với giá vé là cij=cji đồng. Xuất phát từ nút giao thông s, Khuê muốn di chuyển đến nút giao thông t và anh luôn lựa chọn đường đi với chi phí ít nhất.

Ví dụ: thành phố có 5 nút giao thông và 6 tuyến xe buýt:

  • Tuyến 1: 1−2 giá vé 10 đồng; Tuyến 2: 2−5 giá vé 10 đồng;
  • Tuyến 3: 1−4 giá vé 3 đồng; Tuyến 4: 3−4 giá vé 5 đồng;
  • Tuyến 5: 3−5 giá vé 3 đồng; Tuyến 6: 1−3 giá vé 20 đồng.

Xuất phát từ nút 1 đến nút 5, đi theo hành trình 1→4→3→5 hết 11 đồng là đường đi với chi phí ít nhất. Tuy nhiên, nếu Khuê sử dụng 1 vé xe miễn phí thì đường đi 1→3→5 hết 3 đồng là ít nhất (vé xe miễn phí được sử dụng tại tuyến 1−3).

Yêu cầu: Cho biết các tuyến xe buýt với giá vé tương ứng và các giá trị s,t,k. Hãy tính chi phí ít nhất để đi từ nút giao thông s đến nút giao thông t mà không sử dụng quá k vé xe miễn phí. Mỗi lần đi qua một tuyến xe buýt, Khuê hoặc trả đúng giá vé của tuyến đó, hoặc dùng một vé xe miễn phí (khi đó lần đi này không mất tiền).

Dữ liệu vào

  • Dòng đầu tiên ghi năm số nguyên dương n,m,k,s,t;
  • m dòng sau, mỗi dòng 3 số nguyên i,j,cij mô tả có tuyến xe buýt i−j hết cij đồng.

Dữ liệu ra

Một số duy nhất là chi phí ít nhất để đi từ nút giao thông s đến nút giao thông t mà không sử dụng quá k vé xe miễn phí.

Ràng buộc

  • 2≤n≤105, 1≤m≤105, 1≤k≤5.
  • 1≤s,t≤n, s≠t.
  • 1≤i,j≤n, i≠j; mỗi cặp nút có không quá một tuyến xe buýt.
  • 1≤cij≤109.
  • Dữ liệu đảm bảo có thể đi từ nút s đến nút t.

Subtasks

  • Có 40% số test ứng với 40% số điểm có n≤100, m≤1000 và k=1;
  • Có 20% số test ứng với 20% số điểm có n≤105, m≤105 và k=1;
  • Có 40% số test còn lại ứng với 40% số điểm có n≤105, m≤105 và k≤5.

Ví dụ

Input Output Giải thích
5 6 1 1 5
1 2 10
2 5 10
1 4 3
3 4 5
3 5 3
1 3 20
3 Ví dụ trong đề: đi 1→3→5, dùng vé miễn phí cho tuyến 1−3, trả 3 đồng cho tuyến 3−5.
6 7 2 1 6
2 4 7
1 2 12
3 4 20
5 6 16
1 3 6
3 5 5
5 2 1
1 Ví dụ thêm (không có trong đề gốc). Đi 1→2→5→6 (giá 12+1+16=29), dùng 2 vé cho tuyến 1−2 và 5−6, chỉ trả 1 đồng. Đường rẻ nhất khi không dùng vé là 1→3→5→6 (27 đồng), nhưng dùng 2 vé trên đường này vẫn phải trả 5 đồng.

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