Trò chơi của Rubik
Đề bài
Mô tả
Một trò chơi gồm phần. Để hoàn thành trò chơi, bạn phải hoàn thành tất cả các phần. Các phần có thể phụ thuộc lẫn nhau: để làm phần bạn cần hoàn thành trước một số phần khác. Đảm bảo các phụ thuộc không tạo thành chu trình, nên luôn có thể hoàn thành toàn bộ trò chơi.
Bạn có chiếc máy tính đặt ở ba nơi khác nhau, đánh số . Mỗi phần chỉ có thể hoàn thành trên đúng một máy tính .
Bạn được phép thực hiện các thao tác sau:
- Hoàn thành một phần trên máy tính hiện tại: mất đúng giờ (chỉ khi mọi phần mà nó phụ thuộc đã hoàn thành).
- Di chuyển giữa các máy tính. Thời gian di chuyển:
- , , : mất giờ.
- , , : mất giờ.
Ban đầu bạn có thể đứng ở máy tính tùy chọn (không mất thời gian). Hãy tính số giờ ít nhất để hoàn thành tất cả phần.
Dữ liệu vào
- Dòng đầu chứa số nguyên : số phần của trò chơi.
- Dòng thứ hai chứa số nguyên : máy tính có thể hoàn thành phần .
- dòng tiếp theo mô tả các phần. Dòng thứ bắt đầu bằng số nguyên , tiếp theo là số nguyên phân biệt : các phần cần hoàn thành trước phần .
Dữ liệu ra
- Một số nguyên duy nhất: số giờ ít nhất cần thiết.
Ràng buộc
- và
- Các phụ thuộc không tạo thành chu trình.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 1 1 0 |
1 | Chỉ có một phần trên máy , không phụ thuộc gì. Đứng ở máy và hoàn thành, mất giờ. |
| 5 2 2 1 1 3 1 5 2 5 1 2 5 4 1 5 0 |
7 | Bắt đầu ở máy : hoàn thành phần ( giờ). Đi ( giờ), hoàn thành phần rồi phần ( giờ). Đi ( giờ), hoàn thành phần rồi phần ( giờ). Tổng . |
Bình luận