10580: Центроїди дерева


Відправити розв'язок

Бали: 100 (partial)
Time limit: 3.0s
Memory limit: 256M

Author:
Problem type
Allowed languages
Brain****, C++, Java, Pascal, Python, v8js

Дано дерево із n вершин. Кожна вершина має колір. Потрібно обробити q запитів ( \(V,C\)): знайти відстань від \(V\) до найближчої до \(V\) вершини кольору \(C\) . Відстанню між вершинами називається мінімальна кількість ребер у дорозі між ними.

Формат вхідних даних

У першому рядку дано число n (\( 1 \le n \le 10^5 \)), наступний рядок містить числа \(p_1,p_2,...p_{n-1}\), \(0 \le p_i \le i\) . \(p_i\) – батько вершини \(i\) у дереві.

Далі іде рядок із числами \(a_0 , a_1 , ..., a_{n-1}\) . \(0 \le a_i \le n\) . \(a_i\) – колір вершини \(i\) .

Далі іде рядок із числом \(q\) (\( 1 \le q \le 10^5\)).

Наступні \(q\) рядків містять запити \(v,c\) (\( 0 \le v < n\) , \(0 \le c < n \)).

Формат вихідних даних

Для кожного запиту виведіть одне число – відстань до найближчої вершини потрібного кольору, або - 1 , якщо дерево не має вершин такого кольору.

Рішення, що працюють при \(1 \le n \le 200\), будуть набирати не менше 30 балів

Приклад вхідних даних

5
0 1 1 3
1 2 3 2 1
9
0 1
0 2
0 3
1 0
2 1
2 2
3 3
3 1
4 2

Приклад вихідних даних

0 1 2 -1 2 1 2 1 1

Коментарі

Ще немає коментарів.