eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Connect and Disconnect

Connect and Disconnect

Чи знаєте Ви що-небудь про DFS, Depth First Search, пошук у глибину? Наприклад, використовуючи цей метод, можна перевірити зв'язність графа за час \textbf{O}(\textbf{E}). Можна навіть за той же самий час порахувати кількість компонент зв'язності графа. Чи знаєте Ви що-небудь про DSU, Disjoint Set Union, систему множин, що не перетинаються? Використовуючи цю структуру даних, Ви можете опрацьовувати запити виду "Додати ребро у граф" і "Порахувати кількість компонент зв'язності графа" швидко. Тобто обидва запити за \textbf{O}(\textbf{log N}). А чи знаєте Ви що-небудь про Dynamic Connectivity Problem? У цій задачі, вам потрібно вміти швидко опрацьовувати \textbf{3} типи запитів: \begin{enumerate} \item Додати ребро в граф. \item Видалити ребро з графа. \item Порахувати кількість компонент зв'язності графа. \end{enumerate} \InputFile На початку граф пустий. Перший рядок вхідного файлу містить \textbf{2} числа --- \textbf{N} і \textbf{K} --- кількість вершин і кількість запитів (\textbf{1} ≤ \textbf{N} ≤ \textbf{300000}, \textbf{0} ≤ \textbf{K} ≤ \textbf{300000}). Наступні \textbf{K} містять запити, по одному у рядку. Є \textbf{3} типи запитів: \begin{enumerate} \item \textbf{+ u v}: додати ребро між вершинами \textbf{u} і \textbf{v}. Гарантується, що у момент отримання запиту такого ребра у графі немає. \item \textbf{- u v}: видалити ребро між вершинами \textbf{u} і \textbf{v}. Гарантується, що у момент отримання запиту таке ребро у графі єь. \item \textbf{?}: порахувати кількість компонент зв'язності у графі на поточний момент. \end{enumerate} Вершини нумеруються від \textbf{1} до \textbf{N}. Немає запитів з \textbf{u} = \textbf{v}. Граф неорієнтовний. \OutputFile Для кожного запиту виду '\textbf{?}' виведіть кількість компонент зв'язності графа у момент часу запиту у окремому рядку.
Ліміт часу 3 секунди
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
5 11
?
+ 1 2
+ 2 3
+ 3 4
+ 4 5
+ 5 1
?
- 2 3
?
- 4 5
?
Вихідні дані #1
5
1
1
2
Автор Сергій Копеліович
Джерело Зимова Школа, Харків 2011, День 5