Thành phần liên thông

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
C++
Điểm: 2200 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho một đồ thị vô hướng gồm \(N\) đỉnh (được đánh số từ \(1\) đến \(N\)). Ban đầu, đồ thị chưa có cạnh nào. Bạn cần xử lý \(K\) truy vấn thuộc một trong ba loại sau:

  • + \(u\) \(v\): Thêm một cạnh nối giữa hai đỉnh \(u\) và \(v\). (Đảm bảo cạnh này chưa tồn tại trong đồ thị).
  • - \(u\) \(v\): Xóa cạnh nối giữa hai đỉnh \(u\) và \(v\). (Đảm bảo cạnh này đang tồn tại trong đồ thị).
  • ?: Đếm số thành phần liên thông hiện tại của đồ thị.

Input

  • Dòng đầu tiên chứa hai số nguyên \(N\) và \(K\) (\(1 \le N \le 3\cdot 10^5, 0 \le K \le 3\cdot 10^5\)) lần lượt là số đỉnh và số lượng truy vấn.
  • \(K\) dòng tiếp theo, mỗi dòng chứa một trong ba loại truy vấn mô tả ở trên. Không có truy vấn nào có \(u = v\).

Output

  • Với mỗi truy vấn ?, in ra số thành phần liên thông của đồ thị tại thời điểm đó trên một dòng.

Example

Test 1

Input
5 11
?

+ 1 2
+ 2 3
+ 3 4
+ 4 5
+ 5 1
?
- 2 3
?
- 4 5
?
Output
5
1
1
2

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.