Đồ Thị Hai Phía Động
Xem dưới dạng PDF
Gửi bài giải
Điểm:
25
Giới hạn thời gian:
3.0s
Giới hạn bộ nhớ:
256M
đầu vào:
stdin
Đầu ra:
stdout
Tác giả:
Kiểu bài tập
Nhóm nghiên cứu lý thuyết đồ thị tại FPTU cần kiểm tra tính hai phía (bipartite) của một đồ thị đang thay đổi liên tục.
Một đồ thị gọi là hai phía nếu có thể tô màu tất cả đỉnh bằng hai màu sao cho không có cạnh nào nối hai đỉnh cùng màu. Tương đương, đồ thị là hai phía khi và chỉ khi không chứa chu trình độ dài lẻ.
Đồ thị \(N\) đỉnh, ban đầu không có cạnh. Hệ thống nhận \(Q\) thao tác:
add u v— Thêm cạnh \((u, v)\) vào đồ thị (đảm bảo cạnh chưa tồn tại).remove u v— Xóa cạnh \((u, v)\) khỏi đồ thị (đảm bảo cạnh đang tồn tại).query— InYESnếu đồ thị hiện tại là hai phía,NOnếu không.
Lưu ý: Đồ thị không liên thông là hai phía khi và chỉ khi mọi thành phần liên thông đều là hai phía.
Gợi ý: Dùng DSU với thông tin tính chẵn lẻ (parity DSU) kết hợp D&C trên thời gian.
Định dạng đầu vào
- Dòng 1: Hai số nguyên \(N\) và \(Q\) (\(1 \le N, Q \le 10^5\)).
- \(Q\) dòng tiếp theo, mỗi dòng là một thao tác.
Định dạng đầu ra
Với mỗi thao tác query, in YES hoặc NO trên một dòng riêng.
Ví dụ
Input:
3 7
add 1 2
add 2 3
query
add 1 3
query
remove 1 3
query
Output:
YES
NO
YES
Giải thích:
- Cạnh {1–2, 2–3}: đường thẳng 1–2–3, tô màu xen kẽ được → hai phía →
YES. - Thêm 1–3: tạo tam giác {1,2,3} — chu trình độ dài 3 (lẻ) → không hai phía →
NO. - Xóa 1–3: quay về đường thẳng → hai phía →
YES.
Ràng buộc
| Nhóm | \(N\) | \(Q\) |
|---|---|---|
| 1 (30%) | \(\le 10^3\) | \(\le 10^3\) |
| 2 (70%) | \(\le 10^5\) | \(\le 10^5\) |
\(1 \le u, v \le N\), \(u \ne v\).
Nhận xét