Cho một đồ thị luồng điều khiển (CFG) gồm n khối cơ bản đánh số 1..n và m cạnh có hướng. Khối 1 là khối bắt đầu (entry): quy ước IN[1]=∅ luôn luôn, bất kể có cạnh nào đi vào khối 1 hay không.
Mỗi khối i có một danh sách các định nghĩa (assignment) xảy ra theo thứ tự bên trong khối; mỗi định nghĩa là một cặp (tên biến, id định nghĩa) với id là số nguyên duy nhất toàn chương trình (cho sẵn trong input). Định nghĩa cuối cùng của mỗi biến trong khối i mới được khối đó "sinh ra" ở đầu ra: GEN[i] = tập id của định nghĩa CUỐI CÙNG (trong khối i) của mỗi biến được định nghĩa trong khối i. KILL[i] = tập TẤT CẢ các id định nghĩa (ở BẤT KỲ khối nào trong toàn chương trình, kể cả khối i) của các biến mà khối i có định nghĩa, TRỪ đi các id thuộc GEN[i].
Bài toán định nghĩa tới được (reaching definitions) được tính bằng lặp tới điểm cố định:
IN[i]=⋃p→iOUT[p](IN[1]=∅),OUT[i]=GEN[i]∪(IN[i]∖KILL[i])
Với mỗi truy vấn gồm một khối q và một biến v, hãy cho biết trạng thái của biến v tại đầu vào (IN[q]) của khối q khi đạt điểm cố định — đây chính là thông tin trình biên dịch cần để quyết định có thể lan truyền hằng số/copy an toàn tại điểm đó hay không:
UNDEFINED.UNIQUE <id>.AMBIGUOUS <k> <id_1> <id_2> ... <id_k> với k là số định nghĩa và các id liệt kê tăng dần.Dòng 1: hai số nguyên n, m (1≤n≤200, 0≤m≤500). m dòng tiếp theo, mỗi dòng "p q" là một cạnh có hướng p→q (1≤p,q≤n). Tiếp theo n dòng, dòng thứ i mô tả khối i: số nguyên ki (số định nghĩa trong khối) rồi ki cặp "tên_biến id" theo đúng thứ tự xuất hiện trong khối (nếu ki=0, chỉ có số 0). Mọi id định nghĩa trên toàn chương trình đôi một khác nhau. Dòng tiếp theo: số nguyên Q — số truy vấn. Q dòng sau, mỗi dòng "q v" là một truy vấn (khối, tên biến).
In ra đúng Q dòng, mỗi dòng là kết quả truy vấn tương ứng theo đúng thứ tự, ở một trong ba dạng UNDEFINED, UNIQUE <id>, hoặc AMBIGUOUS <k> <id_1> ... <id_k> như mô tả.
Ví dụ:
Đầu vào:
4 4
1 2
1 3
2 4
3 4
2 x 1 y 2
1 x 3
1 x 4
0
2
4 x
4 y
Đầu ra:
AMBIGUOUS 2 3 4
UNIQUE 2
Đầu vào:
1 0
2 x 1 x 2
1
1 x
Đầu ra:
UNDEFINED
Đang tải editor...