Бандити на дереві#10448

Бандити на дереві

1 секунда
256 мегабайтів
Дуже складна

Існує міст, пронумерованих від до . Усі міста з'єднані за допомогою (n - 1) доріг так, що від кожного міста можна дістатися до кожного. Кожна дорога має певну довжину.

Відомо, що місто з номером було захоплено кланом бандитів з номером a_i (1 \leq a_i \leq n) в момент часу t_i. Після захоплення міста (тобто, починаючи з моменту часу t_i включно), через нього можуть проходити тільки представники клану a_i.

Дайте відповідь на запитань наступного вигляду:

Вхідні дані

Перший рядок містить єдине ціле число (2 \leq n \leq 10^5) — кількість міст.

Кожен з наступних (n - 1) рядків містить два цілі числа p_i та d_i (1 \leq p_i < i, 1 \leq d_i \leq 10^3), що позначають дорогу між містами та p_i довжиною d_i. Індексація починається з .

Наступний рядок містить цілих чисел a_i (1 \leq a_i \leq n), що позначають номера кланів, що захопили відповідне місто.

Наступний рядок містить цілих чисел t_i (1 \leq t_i \leq 10^9), що позначають моменти часу захоплення кожного міста.

Наступний рядок містить єдине ціле число (1 \leq m \leq 10^5) — кількість запитань.

Останні рядків описують запитання. Кожен з них містить чотири цілі числа u_i, v_i, b_i, T_i (1 \leq u_i, v_i, b_i \leq n, 1 \leq T_i \leq 10^9) — номера початкового та фінішного міст чергового шляху, номер клану мандрівника, та момент часу початку подорожі відповідно.

Вихідні дані

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

Зверніть увагу на великий об'єм вхідних та вихідних даних у цій задачі. Радимо використовувати швидкі засоби введення та виведення, наприклад scanf/printf замість cin/cout у мові C++, та sys.stdin.readline замість input у Python. Також радимо використовувати інтерпретатор PyPy при розв'язанні задачі на Python.

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading

Приклад 3

Loading
Loading

Оцінювання

  1. ( балів): p_i = 1;

  2. ( балів): n, m \leq 10^3;

  3. ( балів): p_i = i - 1, t_i = 1;

  4. ( балів): p_i = i - 1, a_i = 1, b_i = 2;

  5. ( балів): p_i = i - 1;

  6. ( балів): t_i = 1;

  7. ( балів): a_i = 1, b_i = 2;

  8. ( балів): без додаткових обмежень.