trang chủ / đề bài / dhbb23_ctp_11_b

Đường đi dài nhất qua đúng k cung

Đề bài

Mô tả

Như chúng ta đã biết, bài toán tìm đường đi dài nhất trong một đồ thị có cạnh trọng số không âm là bài toán siêu khó (NP hard). Bài toán sẽ đơn giản hơn nếu như đường đi đó có số cạnh cố định, tức là ta bắt buộc đường đi đó phải đi qua chính xác k cạnh.

Bạn được cho bài toán như sau: Cho một đồ thị có hướng có trọng số gồm n đỉnh và m cung. Các đỉnh được đánh số từ 1 đến n.

Yêu cầu: Tìm một đường đi bất kỳ (bắt đầu tại một đỉnh bất kỳ) đi qua đúng k cung sao cho tổng trọng số các cung được đi qua là lớn nhất có thể.

Một đỉnh hoặc một cung có thể được đi qua nhiều hơn một lần. Đồ thị có thể có khuyên (cung từ một đỉnh tới chính nó) và nhiều cung cùng nối từ u tới v.

Dữ liệu vào

  • Dòng đầu tiên chứa ba số nguyên dương n,m,k;
  • m dòng tiếp theo, mỗi dòng gồm ba số nguyên u,v,w mô tả cung từ u đến v có trọng số w.

Dữ liệu ra

Ghi ra một số duy nhất là trọng số lớn nhất tìm được. Nếu không tồn tại đường đi qua đúng k cung thì in ra −1.

Ràng buộc

  • 1≤n≤100, 1≤m≤10000, 1≤k≤109.
  • 1≤u,v≤n, 0≤w≤109.

Subtasks

  • Subtask 1 (30% số điểm): đồ thị có dạng một vòng tròn, các đỉnh trên vòng được sắp xếp từ 1 đến n: m=n và các cung là 1→2,2→3,…,n−1→n,n→1 (cho theo thứ tự bất kỳ; khi n=1 đó là khuyên 1→1).
  • Subtask 2 (30% số điểm): k≤100.
  • Subtask 3 (40% số điểm): không có ràng buộc gì thêm.

Ví dụ

Input Output Giải thích
4 4 6
1 2 10
2 3 3
3 4 3
4 2 3
25 Đường đi 1→2→3→4→2→3→4 qua đúng 6 cung, tổng trọng số 10+3·5=25.
3 2 3
1 2 5
2 3 7
-1 Ví dụ bổ sung. Đường đi dài nhất trong đồ thị chỉ có 2 cung nên không có đường đi qua đúng 3 cung.
2 3 3
1 2 4
1 2 9
2 1 1
19 Ví dụ bổ sung. Có hai cung từ 1 tới 2; đường đi tốt nhất là 1→2→1→2, cả hai lần đều dùng cung trọng số 9: 9+1+9=19. Bắt đầu từ đỉnh 2 chỉ được 1+9+1=11.

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