QOJ.ac

QOJ

시간 제한: 2 s 메모리 제한: 512 MB 총점: 100

#16487. Ключевая вершина

통계

Дан ориентированный граф $G$, содержащий $n$ вершин и $\boldsymbol{n-1}$ ориентированных рёбер, и положительное целое число $k$, не превосходящее $n$. Гарантируется, что, если считать все рёбра $G$ неориентированными, граф будет связным (то есть образует дерево).

Нужно выполнить $q$ операций. Есть пять типов операций со следующими параметрами:

  • 1 x y: развернуть ребро между вершинами $x$ и $y$. Гарантируется, что между вершинами $x$ и $y$ есть ребро;
  • 2 a: развернуть все входящие рёбра вершины $a$;
  • 3 b: развернуть все исходящие рёбра вершины $b$;
  • 4 c: развернуть все входящие и исходящие рёбра вершины $c$;
  • 5 p: изменить значение $k$ на $p$.

Входящее ребро вершины $u$ — это ориентированное ребро, заканчивающееся в $u$, а исходящее ребро вершины $u$ — это ориентированное ребро, начинающееся в $u$.

Поддерживайте этот ориентированный граф и перед первой операцией и после каждой операции определяйте, могут ли все вершины, кроме $k$, достичь вершины $k$ по текущим ориентированным рёбрам. Если могут, выведите YES, иначе выведите NO.

Входные данные

Первая строка содержит три целых числа $n,k,q$ ($2 \le n \le 10^6$, $0 \le q \le 10^6$, $1 \le k \le n$).

Каждая из следующих $n-1$ строк содержит два положительных целых числа $u_i,v_i$, обозначающих ребро между вершинами $u_i$ и $v_i$, а именно ориентированное ребро из вершины $u_i$ в вершину $v_i$ ($1 \le u_i,v_i \le n$).

Каждая из следующих $q$ строк содержит $2\sim3$ положительных целых числа, описывающих одну операцию. Их смысл и формат приведены выше в условии задачи ($1 \le x,y,a,b,c,p \le n$).

Гарантируется, что, если считать все рёбра $G$ неориентированными, граф будет связным (то есть образует дерево), а при выполнении операции первого типа между вершинами $x$ и $y$ существует ребро.

Выходные данные

Выведите всего $q+1$ строк. Перед первой операцией и после каждой операции определите, могут ли все вершины, кроме $k$, достичь вершины $k$ по текущим ориентированным рёбрам. Если могут, выведите YES, иначе выведите NO.

Примеры

Входные данные 1

10 10 10
9 10
1 5
3 9
8 9
4 9
7 9
5 4
2 10
6 7
4 5
3 2
3 1
1 10 2
1 5 1
1 4 5
5 4
2 9
1 9 3
2 9

Выходные данные 1

YES
NO
NO
NO
NO
NO
YES
NO
NO
NO
NO

Входные данные 2

10 4 10
8 9
2 4
10 5
9 4
3 2
1 2
5 4
6 4
7 8
1 2 1
1 2 1
5 10
1 5 4
1 10 5
3 4
1 5 4
5 2
1 5 10
1 4 5

Выходные данные 2

YES
NO
YES
NO
NO
YES
NO
YES
NO
NO
NO

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.