QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 512 MB Total points: 100

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

Statistics

Дано орієнтований граф $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.