Đồ thị A-Z

Đề bài

Mô tả

Cho một đồ thị có hướng gồm n đỉ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ý m truy vấn thuộc một trong ba loại:

  • "+ u v c": thêm cung có hướng từ u đến v với nhãn c. Đảm bảo tại thời điểm này chưa có cung (u,v) trong đồ thị.
  • "- u v": xóa cung có hướng từ u đến v. Đảm bảo tại thời điểm này đồ thị đang có cung (u,v).
  • "? k": tìm một dãy k đỉnh v1,v2,,vk sao cho tồn tại đồng thời cả hai đường đi v1v2vkvkvk1v1; đồ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 v1v2vk sử dụng các cung (v1,v2),(v2,v3),,(vk1,vk), còn đường đi ngược sử dụng các cung (vk,vk1),,(v2,v1). 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 nm.
  • m 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

  • 2n2·105
  • 1m2·105
  • Với truy vấn thêm: 1u,vn, uv, c là chữ cái Latinh thường.
  • Với truy vấn xóa: 1u,vn, uv.
  • Với truy vấn hỏi: 2k105.
  • Đả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 k=3: chọn dãy [1,2,3]1a2b33a2b1, hai xâu đều là "ab". Truy vấn k=2: 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 k=5 (sau khi đổi cung): chọn [1,2,3,2,1].
2 4
+ 1 2 a
+ 2 1 b
? 3
? 2
YES
NO
Cặp (1,2) có cung hai chiều nhưng nhãn khác nhau (a và b). Với k=3 (lẻ) chỉ cần cặp hai chiều bất kỳ nên YES. Với k=2 (chẵn) cần hai chiều cùng nhãn nên NO.

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