Biến hữu ích
Nộp bài giải
Điểm:
6,00 (OI)
Giới hạn thời gian:
2.0s
Giới hạn bộ nhớ:
256M
Đầu vào:
stdin
Đầu ra:
stdout
Dạng bài
Ngôn ngữ cho phép
Ada, Algol, Assembly, Awk, C, C#, C++, D, Dart, Forth, Fortran, Go, Groovy, Java, Javascript, Kotlin, Lisp, Lua, Nim, ObjC, Pascal, Perl, PHP, Pike, Python, Racket, Ruby, Rust, Scheme, Scratch, Sed, TCL, Typescript, V, Zig
Cho một chương trình gồm trạng thái và phép chuyển có hướng giữa các trạng thái. Trong mỗi trạng thái, biến được thực hiện một trong ba thao tác sau:
- — bỏ qua (không làm gì với ).
- — gán giá trị mới cho .
- — sử dụng giá trị của .
Một đường đi là dãy trạng thái sao cho tồn tại phép chuyển từ đến với mọi .
Giá trị của trong trạng thái được gọi là hữu ích nếu tồn tại đường đi với ở vị trí nào đó () thỏa mãn:
- Tại , biến được gán giá trị (thao tác ).
- Tại , biến được sử dụng (thao tác ).
- Không có trạng thái nào với thực hiện thao tác (giá trị gán tại tồn tại cho đến khi được sử dụng tại ).
Hãy tìm tất cả các trạng thái mà tại đó giá trị của là hữu ích.
Dữ liệu vào
- Dòng đầu tiên chứa hai số nguyên và — số trạng thái và số phép chuyển.
- Dòng thứ hai chứa số nguyên () mô tả thao tác tại từng trạng thái.
- dòng tiếp theo, mỗi dòng chứa hai số nguyên () mô tả phép chuyển từ trạng thái đến trạng thái . Giữa hai trạng thái có thể có nhiều phép chuyển.
Dữ liệu ra
In ra số , mỗi số trên một dòng. nếu giá trị của tại trạng thái là hữu ích, ngược lại .
Ràng buộc
- ,
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 3 1 0 0 2 1 2 2 3 3 4 |
1 1 1 1 |
Đường đi bắt đầu bằng phép gán tại trạng thái và kết thúc bằng phép sử dụng tại trạng thái . Tất cả các trạng thái nằm trên đường đi này nên đều có giá trị hữu ích. |
| 3 1 1 0 2 1 3 |
1 0 1 |
Đường đi duy nhất thỏa mãn là . Trạng thái không nằm trên đường đi nào hợp lệ. |
| 3 1 2 0 1 1 3 |
0 0 0 |
Trạng thái chỉ có thao tác "sử dụng" trước khi có phép gán nào, và trạng thái chỉ có thao tác "gán" mà không có phép sử dụng phía sau. Không tồn tại đường đi hợp lệ nào. |
Bình luận