cpp-105Đọc toàn bộ đề miễn phí

Co đồ thị SCC và Đường đi dài nhất trên đồ thị rút gọn DAG

Cho một đồ thị có hướng gồm N đỉnh và M cạnh. Mỗi đỉnh u có chứa một lượng tài nguyên là số nguyên Vu. Khi bạn đi qua một đỉnh, bạn có thể thu thập toàn bộ tài nguyên tại đỉnh đó…

C++Nâng cao45 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

graphsscctarjandagdp

Kiến thức tiên quyết: tarjan scc, topological sort, dag dp.

Nội dung đề bài

Mục tiêu kiến thức

  • Nắm vững kỹ thuật Co đồ thị (Graph Condensation): Biến đổi đồ thị có hướng có chu trình thành một đồ thị có hướng không chu trình (DAG) bằng cách co mỗi thành phần liên thông mạnh (SCC) thành một siêu đỉnh.
  • Trọng số của mỗi siêu đỉnh bằng tổng giá trị của các đỉnh con bên trong nó.
  • Áp dụng quy hoạch động trên DAG (sắp xếp Tô-pô) để tìm đường đi có tổng trọng số lớn nhất xuất phát từ bất kỳ siêu đỉnh nào.

Mô tả bài toán

Cho một đồ thị có hướng gồm N đỉnh và M cạnh. Mỗi đỉnh u có chứa một lượng tài nguyên là số nguyên Vu. Khi bạn đi qua một đỉnh, bạn có thể thu thập toàn bộ tài nguyên tại đỉnh đó (mỗi đỉnh chỉ được thu thập tối đa một lần dù đi qua nhiều lần). Bạn có thể xuất phát tại bất kỳ đỉnh nào và kết thúc tại bất kỳ đỉnh nào. Hãy tìm lượng tài nguyên lớn nhất có thể thu thập được.

Quy ước nộp bài

  • Chỉ cần viết một chương trình đọc stdin và in ra stdout. Bài này không yêu cầu viết hàm.
  • Không dùng cout để in lời nhắc trước khi đọc dữ liệu. Lời nhắc sẽ lọt vào stdout và làm bài sai.
  • Chỉ in đúng nội dung ở mục Output. Không in thêm nhãn, dòng trống hay ký tự thừa.
  • Output được so khớp từng ký tự, phân biệt chữ hoa/thường và dấu câu.

Input

  • Dòng 1: Gồm 2 số nguyên N, M (1 ≤ N ≤ 105, 0 ≤ M ≤ 2 · 105).
  • Dòng 2: N số nguyên V1, V2, …, VN (0 ≤ Vi ≤ 109).
  • M dòng tiếp theo: Mỗi dòng gồm 2 số nguyên u, v mô tả cạnh có hướng từ u đến v (1 ≤ u, v ≤ N).

Output

  • In ra một số nguyên duy nhất là lượng tài nguyên tối đa thu thập được.

Ràng buộc

  • 1 ≤ N ≤ 105, 0 ≤ M ≤ 2 · 105.
  • Thời gian: 1000ms. Bộ nhớ: 256MB.

Ví dụ 1

Input

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

Output

13
*Giải thích: Các đỉnh 1, 2, 3 tạo thành một chu trình SCC với tổng tài nguyên 4 + 2 + 5 = 11. Từ đỉnh 2 có cạnh sang đỉnh 4 (tài nguyên 2). Lộ trình tối ưu: đi vòng hết chu trình {1, 2, 3} lấy 11 tài nguyên rồi sang đỉnh 4 lấy thêm 2 $\implies$ tổng = 13.*
3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.