#2835. HIGHSCORE - High Score

Bộ nhớ: 256 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Bạn đang chơi một trò chơi có n địa điểm và m chuyến bay một chiều giữa chúng. Mục tiêu của bạn là bay từ địa điểm 1 đến địa điểm n . Mỗi chuyến bay sẽ làm thay đổi điểm số của bạn. Điểm số ban đầu là 0 .

Bạn hãy tìm đường đi từ 1 đến n sao cho tổng điểm số là lớn nhất có thể.

Lưu ý: Có thể có những chu trình mà khi đi qua đó, điểm số của bạn sẽ tăng lên mãi mãi. Nếu tồn tại một đường đi từ 1 đến n mà có thể đi qua một chu trình như vậy, thì điểm số có thể là vô hạn.

Dữ liệu:

  • Dòng đầu tiên chứa hai số nguyên n m : số địa điểm và số chuyến bay.
  • m dòng tiếp theo, mỗi dòng chứa ba số nguyên a, b, x : có một chuyến bay từ a đến b và điểm số của bạn tăng thêm x .

Kết quả: In ra một số nguyên duy nhất là điểm số lớn nhất có thể đạt được. Nếu điểm số có thể lớn vô hạn, in ra -1.

Ví dụ: Dữ liệu:

4 5
1 2 3
2 4 5
1 3 2
3 4 3
1 4 10

Kết quả:

10

Giải thích: Bài toán tìm đường đi dài nhất có thể được chuyển thành bài toán tìm đường đi ngắn nhất bằng cách đổi dấu trọng số các cạnh. Thuật toán Bellman-Ford có thể được sử dụng để giải quyết bài toán này và phát hiện các chu trình có tổng trọng số dương (tức chu trình âm trong bài toán đường đi ngắn nhất tương đương).

Giới hạn:

  • 2 \le n \le 2500
  • 1 \le m \le 5000
  • 1 \le a, b \le n
  • -10^9 \le x \le 10^9