canuc80k7703·4/39

Mạng Phép Toán

Nộp bài trên LQDOJ

Bài 77 · 2-SAT

Có biến Boolean . Mỗi ràng buộc chọn hai biến, một phép toán trong và một bit kết quả ; ràng buộc được thỏa khi . Hãy quyết định liệu có phép gán thỏa tất cả ràng buộc hay không.

Input

  • Dòng đầu chứa hai số nguyên và .
  • Mỗi trong dòng tiếp theo chứa , mô tả phương trình Boolean .

Output

  • In YES nếu tồn tại phép gán thỏa mọi ràng buộc; ngược lại in NO.

Constraints

  • ; ; là hoặc .

Scoring

  • Subtask ( số điểm): và .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

3 3
0 1 1 XOR
1 2 1 AND
0 2 1 OR

Output

YES

Giải thích: Ràng buộc AND ép ; khi đó XOR ép , và ràng buộc OR vẫn cho kết quả .

Test 2

Input

1 2
0 0 0 OR
0 0 1 AND

Output

NO

Giải thích: Ràng buộc đầu ép , còn ràng buộc sau ép , nên hệ vô nghiệm.

Lời giải tóm tắt
  • Phân tích: Mỗi đối tượng có đúng hai trạng thái, vì vậy ta tạo một biến Boolean cho nó. Sáu trường hợp AND/OR/XOR với kết quả 0/1 được viết thành unit clause hoặc hai clause tương đương.
  • Phân tích: Với một clause (A OR B), nếu A sai thì B buộc phải đúng, và ngược lại. Ta thêm hai cung kéo theo NOT A -> B và NOT B -> A.
  • Thuật toán: 1. Tạo hai đỉnh cho mỗi biến, tương ứng với hai literal đối nhau. 2. Chuyển từng ràng buộc của đề thành các clause hai literal rồi thêm các cung kéo theo. 3. Tìm các thành phần liên thông mạnh của đồ thị. 4. Nếu một literal và phủ định của nó nằm cùng thành phần, công thức vô nghiệm. Ngược lại, dùng thứ tự các thành phần để lấy phép gán. 5. Bài chỉ hỏi khả thi, nên sau khi kiểm tra SCC chỉ cần in YES hoặc NO.
  • Chứng minh đúng: Mỗi phép biến đổi ràng buộc ở bước 2 là một tương đương logic, nên phép gán thỏa công thức 2-CNF khi và chỉ khi nó thỏa đề bài. Trong đồ thị kéo theo, nếu một literal và phủ định của nó cùng thành phần liên thông mạnh thì chúng kéo theo lẫn nhau, không thể gán nhất quán. Khi mọi cặp đối nhau thuộc hai thành phần khác nhau, thứ tự tô SCC tạo một phép gán thỏa mọi cung kéo theo, do đó thỏa mọi clause và mọi ràng buộc gốc. Vì vậy thuật toán báo vô nghiệm chính xác và mọi cấu hình được in đều hợp lệ.
  • Độ phức tạp: Thời gian O(V+E) và bộ nhớ O(V+E), trong đó V là số literal và E là số cung kéo theo; với bài này đều tuyến tính theo kích thước input.