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

Розрізання графа

Розрізання графа

Задано неорієнтовний граф. Над ним у заданом порядку виконуються операції наступних двох типів: \begin{itemize} \item \textbf{cut} --- розрізати граф, тобто видалити з нього ребро; \item \textbf{ask} --- перевірити, чи лежать дві вершини графа у одній компоненті зв'язності. \end{itemize} Відомо, що після виконання усіх операцій типу \textbf{cut} ребер в графі не залишилось. Знайдіть результат виконання кожної з операцій типу \textbf{ask}. \InputFile Перший рядок містить три цілих числа, відокремлені пропусками --- кількість вершин графа $n$, кількість ребер $m$ та кількість операцій $k~ (1 \le n \le 50000, 0 \le m \le 10^5, m \le k ≤ 150000)$. Наступні $m$ рядків задають ребра графа; $i$-й з цих рядків містить два числа $u_i$ та $v_i~(1 \le u_i, v_i \le n)$ --- номери кінців i-го ребра. Вершини нумеруються з одиниці; граф не містить кратних ребер та петель. Далі йде $k$ рядків, які описують операції. Операція типу \textbf{cut} задається рядком "\textbf{cut u v}" $~(1 \le u, v \le n)$, який означає. що з графа видаляють ребро між вершинами $u$ та $v$. Операція типу \textbf{ask} задається рядком "\textbf{ask u v}" $~(1 \le u, v \le n)$, який означає, що необхідно взнати, чи лежать у даний момент вершини $u$ та $v$ в одній компоненті зв'язності. Гарантується, що кожне ребро графа зустрінеться в операціях типу \textbf{cut} рівно один раз. \OutputFile Для кожної операції \textbf{ask} виведіть у окремому рядку слово "\textbf{YES}", якщо дві вказані вершини лежать у одній компоненті зв'язності, і "\textbf{NO}" у протилежному випадку. Порядок відповідей повинен відповідати порядку операцій \textbf{ask} у вхідних даних.
Ліміт часу 3 секунди
Ліміт використання пам'яті 128 MiB
Вхідні дані #1
3 3 7
1 2
2 3
3 1
ask 3 3
cut 1 2
ask 1 2
cut 1 3
ask 2 1
cut 2 3
ask 3 1
Вихідні дані #1
YES
YES
NO
NO