Đồ thị hai phía động
Xem PDF
Điểm:
2200 (p)
Thời gian:
1.0s
Bộ nhớ:
256M
Input:
bàn phím
Output:
màn hình
Một đồ thị được gọi là hai phía nếu có thể phân chia tập các đỉnh thành hai tập rời nhau sao cho không có hai đỉnh nào cùng thuộc một tập được nối với nhau bởi một cạnh (tương đương với việc đồ thị không chứa chu trình độ dài lẻ). Nếu đồ thị gồm nhiều thành phần liên thông, nó là đồ thị hai phía khi và chỉ khi mọi thành phần liên thông của nó đều là hai phía.
Ban đầu, đồ thị gồm \(N\) đỉnh và không có cạnh nào. Hệ thống sẽ nhận lần lượt \(Q\) thao tác thuộc một trong ba loại sau:
add u v: Thêm một cạnh vô hướng nối giữa hai đỉnh \(u\) và \(v\) (đảm bảo cạnh này hiện chưa tồn tại trong đồ thị).remove u v: Xóa cạnh vô hướng nối giữa hai đỉnh \(u\) và \(v\) khỏi đồ thị (đảm bảo cạnh này đang tồn tại trong đồ thị).query: Kiểm tra xem đồ thị tại thời điểm hiện tại có phải là đồ thị hai phía hay không.
Input
- Dòng đầu tiên chứa hai số nguyên \(N\) và \(Q\) (\(1 \leq N, Q \leq 10^5\)) lần lượt là số đỉnh của đồ thị và số thao tác.
- \(Q\) dòng tiếp theo, mỗi dòng mô tả một thao tác theo một trong ba định dạng:
add u v,remove u v, hoặcquery(\(1 \leq u, v \leq N, u \neq v\)).
Output
- Với mỗi thao tác
query, in ra trên một dòng:YESnếu đồ thị tại thời điểm đó là đồ thị hai phía.NOnếu đồ thị chứa chu trình độ dài lẻ.
Example
Test 1
Input
3 7
add 1 2
add 2 3
query
add 1 3
query
remove 1 3
query
Output
YES
NO
YES
Bình luận