canuc80k3806·7/50

Hành Trình Thu Thập

Nộp bài trên LQDOJ

Bài 38 · DFS Tree

Chọn đỉnh bắt đầu tùy ý và đi theo các cung; giá trị ở mỗi đỉnh chỉ được thu một lần. Tìm tổng giá trị lớn nhất có thể thu.

Input

  • Dòng đầu chứa và .
  • Dòng thứ hai chứa giá trị ..wn.
  • Mỗi trong dòng tiếp theo chứa một cung .

Output

  • In tổng giá trị lớn nhất có thể thu.

Constraints

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

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

Output

22

Giải thích: Có thể thu ở SCC , tiếp tục thu ở rồi thu tại đỉnh . Tổng lớn nhất là .

Lời giải tóm tắt
  • Phân tích: Co SCC và cộng trọng số trong từng SCC. Trên DAG ngưng tụ, chạy DP đường đi lớn nhất theo thứ tự topo, cho phép bắt đầu tại mọi SCC.
  • Thuật toán: Co SCC và cộng trọng số trong từng SCC. Trên DAG ngưng tụ, chạy DP đường đi lớn nhất theo thứ tự topo, cho phép bắt đầu tại mọi SCC.
  • Chứng minh đúng: 1. Trong SCC, từ điểm vào có thể thăm mọi đỉnh và tới một đỉnh có cung rời cần thiết, nên thu được toàn bộ tổng SCC. 2. Mỗi hành trình giữa các SCC tương ứng một đường đi trên DAG ngưng tụ và ngược lại. 3. DP topo xét mọi tiền nhiệm trước khi truyền trạng thái, nên dp[c] là tổng tốt nhất của mọi đường kết thúc tại c; lấy max cho đáp án.
  • Độ phức tạp: Thời gian O(n+m), bộ nhớ O(n+m).