QOJ.ac

QOJ

時間限制: 5 s 記憶體限制: 2048 MB 總分: 100 难度: [顯示] 可 Hack ✓

#18205. Искусство структур данных

统计

Маленькая Голубая Рыбка ведет мастер-класс по структурам данных в Университете Кубка. В традиционных задачах на структуры данных вам обычно предлагается набор запросов и требуется вычислить какое-то сложное выражение на фиксированной структуре данных. Ой, ну правда... кому это нужно в 2026 году? Маленькая Голубая Рыбка хочет чего-то другого. Она просит вас самостоятельно придумать структуру данных.

Ваша задача — построить корневое бинарное дерево $T$: Каждая внутренняя вершина дерева $T$ имеет ровно двух потомков. * $T$ имеет ровно $m$ листьев, помеченных числами от $1$ до $m$.

problem_18205_1.png

Рисунок 1: Корректное дерево $T$ для $m = 6$. Каждая внутренняя вершина имеет ровно двух потомков, а листья содержат метки $1, \dots, m$ в некотором порядке. Глубина дерева равна 5.

Для любого множества меток листьев $S$ определим его стоимость в $T$ как количество таких внутренних вершин $v$ дерева $T$, что поддерево вершины $v$ содержит: Хотя бы один лист, метка которого принадлежит $S$. Хотя бы один лист, метка которого не принадлежит $S$.

Маленькая Голубая Рыбка дает вам два корневых дерева $T_1$ и $T_2$. Оба дерева имеют вершины, помеченные числами от $1$ до $n$, и вершина $1$ является корнем каждого из них. Она также дает вам $m$ упорядоченных пар $(x_i, y_i)$, где $x_i$ — вершина дерева $T_1$, а $y_i$ — вершина дерева $T_2$. Лист с меткой $\ell$ в $T$ ассоциирован со значениями $x_\ell$ и $y_\ell$.

Для корневого дерева $T$ и вершины $x$ пусть $\text{path}(T, x)$ — множество вершин на пути от $x$ до корня дерева $T$, включая оба конца.

Маленькая Голубая Рыбка хочет, чтобы вы знали, что для каждой вершины $u$ дерева $T_1$ определяется $Q_1(u) = \{\ell \mid x_\ell \in \text{path}(T_1, u)\}$. Аналогично, для каждой вершины $u$ дерева $T_2$ определяется $Q_2(u) = \{\ell \mid y_\ell \in \text{path}(T_2, u)\}$. Каждое $Q_i(u)$ является множеством меток листьев дерева $T$.

*Лист — это вершина без потомков, а внутренняя вершина — это вершина, которая не является листом.

problem_18205_2.png

Рисунок 2: Множество $\text{path}(T_i, x)$ содержит каждую вершину на единственном пути от $x$ до корня, включая оба конца.

Множества, которые проверяет Маленькая Голубая Рыбка, — это $Q_1(u)$ и $Q_2(u)$ для каждого $1 \le u \le n$. Маленькая Голубая Рыбка примет вашу структуру данных, если она удовлетворяет обоим требованиям: глубина каждой вершины в $T$ не превышает 100, где корень имеет глубину 1; среди всех $2n$ проверенных множеств максимальная стоимость не превышает 16 666.

Покажите Маленькой Голубой Рыбке, что вы настоящий мастер структур данных!

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

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

Следующая строка содержит $n - 1$ целое число $p_2, p_3, \dots, p_n$ ($1 \le p_i < i$), описывающих дерево $T_1$. Целое число $p_i$ является родителем вершины $i$ в $T_1$.

Следующая строка содержит $n - 1$ целое число $p'_2, p'_3, \dots, p'_n$ ($1 \le p'_i < i$), описывающих дерево $T_2$. Целое число $p'_i$ является родителем вершины $i$ в $T_2$.

Следующие $m$ строк описывают упорядоченные пары. $i$-я из этих строк содержит два целых числа $x_i$ и $y_i$ ($1 \le x_i, y_i \le n$).

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

Выведите одну строку, содержащую последовательность целых чисел, описывающую построенное вами бинарное дерево $T$. Лист с меткой $i$ описывается целым числом $i$. Внутренняя вершина описывается целым числом $0$, за которым следует описание её левого поддерева, а затем описание её правого поддерева.

При таком кодировании каждое целое число от $1$ до $m$ должно встретиться ровно один раз, и каждое вхождение $0$ представляет одну внутреннюю вершину.

Например, последовательность 0 1 0 2 3 описывает дерево, у которого корень имеет лист $1$ в качестве левого потомка и внутреннюю вершину в качестве правого потомка; эта внутренняя вершина имеет листья $2$ и $3$ в качестве своих потомков.

Примеры

Примеры 1

1 1
1 1
1

Примеры 2

3 3
1 1
1 2
1 1
2 2
3 3
0 1 0 2 3

Примеры 3

5 8
1 2 3 4
1 1 1 1
1 1
2 1
3 2
4 2
5 3
5 5
1 5
3 4
0 0 1 0 0 3 8 0 2 7 0 4 0 5 6

Примечание

Объяснение к примеру 1: Бинарное дерево имеет единственный лист с меткой 1. Его глубина равна 1, и каждый возможный запрос имеет стоимость 0.

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.