Đồ thị A-Z
Đề bài
Mô tả
Cho một đồ thị có hướng gồm đỉnh. Mỗi cung có hướng được gắn một ký tự chữ cái Latinh thường. Ban đầu đồ thị không có cung nào.
Bạn cần xử lý truy vấn thuộc một trong ba loại:
- "+ u v c": thêm cung có hướng từ đến với nhãn . Đảm bảo tại thời điểm này chưa có cung trong đồ thị.
- "- u v": xóa cung có hướng từ đến . Đảm bảo tại thời điểm này đồ thị đang có cung .
- "? k": tìm một dãy đỉnh sao cho tồn tại đồng thời cả hai đường đi và ; đồng thời nếu ghi lại các ký tự dọc theo mỗi đường đi thì hai xâu thu được phải bằng nhau. Được phép thăm lại một đỉnh bao nhiêu lần tùy ý.
Với mỗi truy vấn loại thứ ba, in ra YES nếu tồn tại dãy như mô tả, ngược lại in ra NO.
Lưu ý: đường đi sử dụng các cung , còn đường đi ngược sử dụng các cung . Do đó mỗi cặp đỉnh liên tiếp trong dãy phải có cung theo cả hai chiều.
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và .
- dòng tiếp theo, mỗi dòng mô tả một truy vấn theo một trong ba định dạng ở trên.
Dữ liệu ra
Với mỗi truy vấn loại "? k", in ra YES hoặc NO trên một dòng riêng.
Ràng buộc
- Với truy vấn thêm: , , là chữ cái Latinh thường.
- Với truy vấn xóa: , .
- Với truy vấn hỏi: .
- Đảm bảo không thêm cung bị trùng và chỉ xóa cung đang tồn tại.
- Có ít nhất một truy vấn loại thứ ba.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 11 + 1 2 a + 2 3 b + 3 2 a + 2 1 b ? 3 ? 2 - 2 1 - 3 2 + 2 1 c + 3 2 d ? 5 |
YES NO YES |
Truy vấn : chọn dãy vì và , hai xâu đều là "ab". Truy vấn : cần một cặp đỉnh có cung hai chiều với cùng nhãn, không tồn tại nên NO. Truy vấn (sau khi đổi cung): chọn . |
| 2 4 + 1 2 a + 2 1 b ? 3 ? 2 |
YES NO |
Cặp có cung hai chiều nhưng nhãn khác nhau (a và b). Với (lẻ) chỉ cần cặp hai chiều bất kỳ nên YES. Với (chẵn) cần hai chiều cùng nhãn nên NO. |
Bình luận