Biến hữu ích

Đề bài

Mô tả

Cho một chương trình gồm n trạng thái và m phép chuyển có hướng giữa các trạng thái. Trong mỗi trạng thái, biến V được thực hiện một trong ba thao tác sau:

  • 0 — bỏ qua (không làm gì với V).
  • 1 — gán giá trị mới cho V.
  • 2 — sử dụng giá trị của V.

Một đường đi là dãy trạng thái p1,p2,,pk sao cho tồn tại phép chuyển từ pi đến pi+1 với mọi 1i<k.

Giá trị của V trong trạng thái v được gọi là hữu ích nếu tồn tại đường đi p1,p2,,pk với pi=v ở vị trí nào đó (1ik) thỏa mãn:

  • Tại p1, biến V được gán giá trị (thao tác 1).
  • Tại pk, biến V được sử dụng (thao tác 2).
  • Không có trạng thái pj nào với j>1 thực hiện thao tác 1 (giá trị gán tại p1 tồn tại cho đến khi được sử dụng tại pk).

Hãy tìm tất cả các trạng thái mà tại đó giá trị của V là hữu ích.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên nm — số trạng thái và số phép chuyển.
  • Dòng thứ hai chứa n số nguyên f1,f2,,fn (0fi2) mô tả thao tác tại từng trạng thái.
  • m dòng tiếp theo, mỗi dòng chứa hai số nguyên ai,bi (aibi) mô tả phép chuyển từ trạng thái ai đến trạng thái bi. Giữa hai trạng thái có thể có nhiều phép chuyển.

Dữ liệu ra

In ra n số r1,r2,,rn, mỗi số trên một dòng. ri=1 nếu giá trị của V tại trạng thái i là hữu ích, ngược lại ri=0.

Ràng buộc

  • 1n,m105
  • 0fi2
  • 1ai,bin, aibi

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 1234 bắt đầu bằng phép gán tại trạng thái 1 và kết thúc bằng phép sử dụng tại trạng thái 4. 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à 13. Trạng thái 2 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 1 chỉ có thao tác "sử dụng" trước khi có phép gán nào, và trạng thái 3 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

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0