Bài toán những cánh cửa
Đề bài
Mô tả
Có căn phòng, mỗi phòng có một cánh cửa. Mỗi cửa đang ở trạng thái khóa hoặc mở. Trạng thái ban đầu của cửa phòng là : nghĩa là cửa đang khóa, nghĩa là cửa đang mở.
Có công tắc. Mỗi công tắc điều khiển một số cửa. Mỗi cửa được điều khiển bởi đúng hai công tắc. Khi bật hoặc tắt một công tắc (đổi trạng thái công tắc), tất cả các cửa mà công tắc đó điều khiển đều bị đảo trạng thái (khóa thành mở, mở thành khóa).
Ban đầu tất cả công tắc ở trạng thái tắt. Bạn có thể chọn đổi trạng thái một tập công tắc bất kỳ (mỗi công tắc chỉ tính bật hoặc không). Hãy xác định liệu có cách nào để tất cả các cửa cùng mở hay không.
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và — số phòng và số công tắc.
- Dòng thứ hai chứa số nguyên () — trạng thái ban đầu của các cửa.
- dòng tiếp theo, dòng thứ bắt đầu bằng số nguyên () — số cửa mà công tắc điều khiển, tiếp theo là số nguyên phân biệt là chỉ số các phòng mà công tắc đó điều khiển.
Dữ liệu bảo đảm mỗi cửa được điều khiển bởi đúng hai công tắc.
Dữ liệu ra
In ra "YES" nếu tồn tại cách để tất cả cửa cùng mở, ngược lại in ra "NO".
Ràng buộc
- Mỗi cửa được điều khiển bởi đúng hai công tắc.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 3 1 0 1 3 1 2 3 1 2 2 1 3 |
YES | Trạng thái ban đầu là [1, 0, 1]. Bật công tắc 3 được [0, 0, 0], sau đó bật công tắc 1 được [1, 1, 1] — tất cả cửa mở. |
| 3 3 1 0 1 3 1 2 3 2 1 2 1 3 |
NO | Không có tập công tắc nào làm tất cả cửa cùng mở. |
| 3 3 1 0 1 2 1 3 2 1 2 2 2 3 |
NO | Các ràng buộc mâu thuẫn nhau, không thể mở đồng thời mọi cửa. |
Bình luận