QOJ.ac

QOJ

時間限制: 2.0 s 記憶體限制: 1024 MB 總分: 100 可 Hack ✓

#18609. Хорошие раскраски — 8

统计

Ильдар решил заняться абстрактной живописью. В качестве основы для своей картины он взял корневое дерево с $n$ вершинами: граф без циклов, где вершина номер 1 обозначена корнем. У корня нет родителя, а для любой другой вершины $u \ge 2$ первая вершина на пути от $u$ до корня называется родителем вершины $u$ и обозначается $p_u$. Вершины, у которых родителем является вершина $v$, называются детьми вершины $v$. Если вершина не имеет детей, она называется листом. Гарантируется, что у корня есть хотя бы два ребенка.

Выполним обход дерева в глубину (DFS): посещаем корень, а затем рекурсивно обходим поддеревья его детей одно за другим в том же порядке. Вершины дерева нумеруются в порядке этого обхода в глубину. Таким образом, для каждого $i$ от 1 до $n$ номера вершин в поддереве вершины $i$ образуют множество последовательных целых чисел.

Пусть в дереве $m$ листьев. Ильдар выписал их номера в порядке возрастания, получив последовательность чисел $l_1 < l_2 < \dots < l_m$, и соединил ребром все пары листьев вида $(l_j, l_{j+1})$, а также соединил вершины $l_m$ и $l_1$. Цикл $l_1 \to l_2 \to \dots \to l_m \to l_1$, добавленный в граф, называется внешним циклом.

Ильдар изобразил получившийся граф на плоскости следующим образом: он представил внешний цикл в виде окружности, вдоль которой против часовой стрелки расположены листья $l_1, l_2, \dots, l_m$, при этом дуги окружности между соседними вершинами представляют собой ребра внешнего цикла. Остальные вершины дерева изображены как отдельные точки, расположенные внутри этой окружности. Ребра дерева представлены отрезками между вершинами, причем вершины и ребра расположены таким образом, что отрезки ребер не имеют общих внутренних точек. На рисунке ниже показан пример изображения дерева.

В изображении Ильдара часть плоскости внутри окружности внешнего цикла разбита на $m$ областей, ограниченных ребрами графа. Эти области будем называть гранями. Две различные грани будем называть смежными, если они имеют общее ребро. Например, на рисунке выше 5 граней, обозначим их как $\Gamma_1, \Gamma_2, \Gamma_3, \Gamma_4$ и $\Gamma_5$.

Смежными гранями на рисунке выше являются пары граней $(\Gamma_1, \Gamma_2)$, $(\Gamma_1, \Gamma_5)$, $(\Gamma_2, \Gamma_3)$, $(\Gamma_2, \Gamma_4)$, $(\Gamma_2, \Gamma_5)$, $(\Gamma_3, \Gamma_4)$ и $(\Gamma_4, \Gamma_5)$.

Чтобы завершить картину, Ильдар планирует раскрасить каждую грань в один из $k$ цветов. Раскраска называется правильной, если смежные грани окрашены в разные цвета. Ильдар называет потенциалом своего рисунка остаток от деления числа различных правильных раскрасок на $10^9 + 7$.

После оценки потенциала исходного рисунка Ильдар выполняет $q$ операций с ребрами нарисованного графа. Рассмотрим $i$-ю операцию, которая задается числом $v_i$ и выполняется над ребром дерева, соединяющим вершины $v_i$ и $p_{v_i}$. Если это ребро в данный момент изображено на рисунке, Ильдар удаляет его из рисунка; если это ребро отсутствует на рисунке, то оно добавляется. После каждого изменения множество граней на рисунке может измениться: две грани могут слиться при удалении ребра, или одна грань может разделиться на две при добавлении ребра. Например, если на рисунке выше удалить ребро $8 - 9$, то грани $\Gamma_4$ и $\Gamma_5$ сольются в одну грань $\Gamma_{4+5}$.

Теперь смежными парами граней на рисунке являются $(\Gamma_1, \Gamma_2)$, $(\Gamma_1, \Gamma_{4+5})$, $(\Gamma_2, \Gamma_3)$, $(\Gamma_2, \Gamma_{4+5})$ и $(\Gamma_3, \Gamma_{4+5})$.

После выполнения каждой операции необходимо снова определить потенциал рисунка: остаток от деления числа правильных раскрасок граней не более чем в $k$ цветов на $10^9 + 7$.

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

Первая строка входных данных содержит целое число $t$ ($1 \le t \le 10\,000$) — количество наборов входных данных. Далее следует описание $t$ наборов входных данных.

Первая строка каждого набора содержит три целых числа $n$, $k$ и $q$ ($3 \le n \le 10^6$, $2 \le k \le 10^9$, $0 \le q \le 300\,000$) — количество вершин в дереве, количество доступных цветов и количество выполняемых операций соответственно.

Вторая строка каждого набора содержит числа $p_2, p_3, \dots, p_n$ ($1 \le p_i < i$), где $p_i$ — родитель вершины $i$ в дереве. Гарантируется, что вершины дерева пронумерованы в порядке обхода в глубину и что среди значений $p_2, \dots, p_n$ значение 1 встречается хотя бы два раза.

Затем следуют $q$ строк, $i$-я из которых содержит число $v_i$ ($2 \le v_i \le n$) — параметр $i$-й операции.

Гарантируется, что сумма $n$ по всем наборам входных данных не превосходит $10^6$.

Гарантируется, что сумма $q$ по всем наборам входных данных не превосходит $300\,000$.

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

Для каждого набора входных данных выведите $q + 1$ целых чисел, первое из которых должно быть равно потенциалу исходного рисунка, а остальные — потенциалу рисунка после выполнения каждой операции.

Подзадачи

Определим высоту дерева как максимальное количество ребер на простом пути от корня до любой другой вершины.

Подзадача Баллы $n$ $k$ $q$ Дополнительные ограничения Необходимые подзадачи
1 6 $n = 3$ $k \le 4$ $q \le 10$ $t \le 100$, $p_2 = p_3 = 1$
2 9 $\sum n \le 1000$ $q = 0$ $p_i = 2 \cdot \lfloor \frac{i}{2} \rfloor - 1$, $n$ нечетно
3 10 $\sum n \le 1000$ $\sum q \le 1000$ $p_i = 1$ 1
4 4 $n \le 9$ $k \le 4$ $q = 0$ $t \le 100$
5 3 $n \le 9$ $k \le 4$ $q \le 10$ $t \le 100$ Self, 4
6 2 $\sum n \le 1000$ $k = 2$ $q = 0$
7 11 $\sum n \le 1000$ $q = 0$ 2, 4, 6
8 15 $\sum n \le 1000$ $\sum q \le 1000$ Self, 1–7
9 4 $\sum n \le 5000$ $\sum q \le 5000$ Self, 1–8
10 3 $\sum n \le 10\,000$ $\sum q \le 10\,000$ Self, 1–9
11 6 $\sum n \le 100\,000$ $\sum q \le 5000$ Self, 1–9
12 7 $\sum n \le 100\,000$ $\sum q \le 100\,000$ высота не более 20 Self, 1, 4, 5
13 14 $\sum n \le 100\,000$ $\sum q \le 100\,000$ Self, 1–12
14 3 $\sum n \le 300\,000$ $\sum q \le 300\,000$ Self, 1–13
15 3 $\sum n \le 1\,000\,000$ $\sum q \le 300\,000$ Self, 1–14

Примеры

Пример ввода 1

2
3 4 5
1 1
2
3
2
3
3
9 4 8
1 2 2 1 5 5 1 8
9
8
3
5
4
3
9
8

Пример вывода 1

12
4
4
4
12
4
96
48
48
24
12
12
12
12
36

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.