Надіслати розв'язок

Бали: 20,00 (partial)
Time limit: 2.0s
Memory limit: 500M

Author:
Problem type
Allowed languages
Assembly, Awk, Brain****, C, C++, Java, mono C#, Pascal, Perl, Python, Sed, Text, vb

Ви граєте у свою улюблену мобільну гру. Карта гри складається з ~N~ (~2≤N≤10^5~) кімнат, помічених ~1…N~ з'єднаних ~N-1~ ребрами так, що утворюють дерево.

Ви можете дослідити карту, виконуючи серію "подорожей". Подорож це простий шлях з кімнати 1 до будь-якої іншої кімнати на дереві. Коли ви закінчуєте одну подорож, ви можете почати іншу знову з кімнати 1 . Карта завершена, коли кожна кімната відвідана хоча б однією подорожжю. Ваша головна мета – завершити карту мінімальною кількістю подорожей.

Ваша друга мета – зібрати якнайбільше зілля. Перш ніж розпочнуться подорожі, зілля з'явиться у деякій кімнаті. Ви можете взяти зілля, відвідавши кімнату, де з'явилося зілля перед поточною подорожжю. Якщо Ви не візьмете зілля, воно зникне, коли ця подорож закінчиться, і Ви не зможете взяти її у майбутній подорожі.

Як розумний програміст, після перегляду файлів гри, Ви змогли передбачити, де з'явиться зілля перед наступними ~N~ подорожами.

Яка максимальна кількість зілля, яку Ви можете зібрати за мінімальної кількості подорожей?

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

Перший рядок введення містить ціле число ~N~, кількість кімнат на карті.

Потім слідують ~N~ розділених одиночними пробілами цілих чисел ~p_1,p_2,…,p_N~ , ~1≤p_i≤N~ , де ~p_i~ це кімната, в якій з'явиться зілля перед ~i~-ю подорожжю.

Далі йдуть ~N-1~ рядків, що містять два розділених пробілами цілих числа ~a,b~ (~1≤a,b≤N~) - ребро між вершинами ~a~ і ~b~ . Гарантується, що ці ребра утворюють дерево.

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

Виведіть один рядок, що містить максимальну кількість зілля, яку Ви можете зібрати за мінімальну кількість подорожей.

ОЦІНЮВАННЯ:

  • Тести 2 -7 (30 балів): ~N≤1000~
  • Тести 8-15 (70 балів): Немає додаткових обмежень.

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

5
5 4 3 2 1
1 2
1 3
3 4
3 5

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

2

У цьому випадку мінімальна кількість необхідних подорожей дорівнює 3 .

Один оптимальний план, який збирає два зілля за три подорожі такий:

  • Подорож 1: 1→3→5 (Беремо зілля у 5)
  • Подорож 2: 1→3→4 (Беремо зілля у 4)
  • Подорож 3: 1→2 (завершуємо подорож і ігноруємо зілля в 3)

Альтернативний план:

  • Подорож 1: 1→2 (немає зілля)
  • Подорож 2: 1→3→4 (Беремо зілля в 4)
  • Подорож 3: 1→3→5 (Беремо зілля 3)

Коментарі

Please read the guidelines before commenting.


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