Bộ đồng xử lý
Đề bài
Mô tả
Một chương trình gồm tác vụ được đánh số từ đến . Giữa các tác vụ có quan hệ phụ thuộc, tạo thành một đồ thị có hướng không chu trình: nếu tác vụ phụ thuộc tác vụ thì phải hoàn thành trước khi được thực thi.
Mỗi tác vụ chỉ chạy được trên đúng một trong hai thiết bị: bộ xử lý chính hoặc bộ đồng xử lý. Giá trị cho biết tác vụ thuộc loại nào: nghĩa là tác vụ chỉ chạy trên bộ xử lý chính, nghĩa là tác vụ chỉ chạy trên bộ đồng xử lý.
Bộ xử lý chính điều khiển toàn bộ chương trình và tự động nhận kết quả từ bộ đồng xử lý. Mỗi lần gọi bộ đồng xử lý, ta gửi cho nó một tập tác vụ (tất cả đều thuộc loại ). Tập này hợp lệ khi với mọi tác vụ trong tập, mọi tác vụ mà nó phụ thuộc đều đã hoàn thành từ trước hoặc cũng nằm trong chính tập đó.
Hãy tìm số lần gọi bộ đồng xử lý ít nhất để chạy xong toàn bộ chương trình.
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và : số tác vụ và số quan hệ phụ thuộc.
- Dòng thứ hai chứa số nguyên , mỗi số bằng hoặc .
- dòng tiếp theo, mỗi dòng chứa hai số nguyên và (), nghĩa là tác vụ phụ thuộc tác vụ .
Các cặp đôi một phân biệt và đồ thị phụ thuộc đảm bảo không có chu trình.
Dữ liệu ra
In ra một số nguyên duy nhất: số lần gọi bộ đồng xử lý ít nhất.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 3 1 1 1 0 0 1 0 2 3 0 |
1 | Các tác vụ chạy trên bộ đồng xử lý. Tác vụ và không phụ thuộc gì, tác vụ phụ thuộc cả và , nên cả ba được gửi trong cùng một lần gọi. Sau đó tác vụ chạy trên bộ xử lý chính. |
| 4 3 0 1 0 1 0 1 1 2 2 3 |
2 | Đồ thị là một dây chuyền, thứ tự thực thi bắt buộc là . Gọi bộ đồng xử lý cho tác vụ , chạy tác vụ trên bộ xử lý chính, gọi bộ đồng xử lý lần nữa cho tác vụ , cuối cùng chạy tác vụ . |
Bình luận