10937. Автомат із іграшками


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

Бали: 100
Time limit: 2.0s
Memory limit: 500M

Authors:
Problem type
Allowed languages
C++, Java, Pascal, Python

У розважальному центрі Е-міста було встановлено ігровий автомат нового покоління. В автомат можна кинути монету і стежити за її просуванням зверху вниз по лабіринту, що розгалужується, з трубок. У лабіринті є \(n\) вузлів, пронумерованих числами від 1 до \(𝑛\) . При киданні монета потрапляє у перший вузол. Кожен вузол лабіринту, крім першого, має одну трубку, що входить зверху, по якій монета може в нього потрапити. З кожного вузла виходить не більше двох трубок, що йдуть вниз, одна з яких веде ліворуч, а інша праворуч. Кожна трубка має деяку ширину. Монета провалюється в ширшу трубку, а у разі рівності ширини трубок – у ліву.

Після проходження монети по трубці ширина цієї трубки зменшується на 1. Монета не може пройти по трубці ширини 0. Якщо монета досягла вузла, з якого вона не може далі рухатися вниз, автомат зупиняється і чекає, коли в нього кинуть наступну монету.

На початку в кожному вузлі лабіринту знаходиться по іграшці. Коли монета потрапляє у вузол вперше, іграшка, що у цьому вузлі, дістається гравцю, який кинув цю монету.

Степанові сподобалася іграшка, яка знаходиться у вузлі з номером \(𝑣\).

Потрібно написати програму, яка визначає скільки монет повинен кинути в автомат Степан, щоб отримати іграшку з вузла \(𝑣\) .

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

У першому рядку вхідного файлу міститься число \(𝑛\) — кількість вузлів у лабіринті.

У наступних \(n\) рядках задані описи всіх вузлів, в \(k\)-у з цих рядків описаний вузол з номером \(k\) .

Опис \(k\)-го вузла складається з чотирьох цілих чисел: \(𝑎_𝑘 , 𝑢_𝑘 , 𝑏_𝑘 , 𝑤_𝑘 \). Якщо з \(k\)-го вузла виходить ліва трубка, то \(𝑎_𝑘\) - номер вузла, до якого вона веде (\(𝑘 < 𝑎_𝑘 <= 𝑛\) ), а \(𝑢_𝑘\) - її ширина. Якщо лівої трубки немає, то \(𝑎_𝑘 = 𝑢_𝑘 = 0\). Якщо з \(k\)-го вузла виходить права трубка, то \(b_k\) номер вузла, в який вона веде (\(k < b_k \le n\)), а \(w_k\) її ширина. Якщо правої трубки немає, то \(𝑏_𝑘 = 𝑤_𝑘 = 0\).

В останньому рядку задано ціле число \(𝑣\) (\(1 \le 𝑣 \le 𝑛 \)) — номер вузла, в якому знаходиться іграшка, яка сподобалася Степану.

Гарантується, що до всіх вузлів, крім першого, входить рівно одна трубка

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

Вихідний файл повинен містити одне число — кількість монет, яку необхідно кинути в автомат Степану, щоб отримати іграшку, яка знаходиться у вузлі \(𝑣\) . Якщо вибрати іграшку неможливо, виведіть число −1.

Система оцінки

Це завдання містить дві підзадачі. Для оцінки кожного підзавдання використовується своя група тестів. Бали за підзавдання нараховуються тільки в тому випадку, якщо всі тести цієї групи пройдені.

  • Підзавдання 1 \(1 \le 𝑛 \le 100\) \(1 \le 𝑢_𝑘\); \(𝑤_𝑘 \le 300\) Підзавдання оцінюється в 50 балів.
  • Підзавдання 2 \(1 \le 𝑛 \le 10^5\) \(1 \le 𝑢_𝑘; 𝑤_𝑘 \le 10^9\) Підзавдання оцінюється в 50 балів.

Пояснення

У першому прикладі перша монета пройде лабіринт наступним шляхом, і гравець отримає іграшки з вершин 1, 3 і 4:

Друга монета пройде лабіринт наступним шляхом, і гравець отримає іграшки з вершин 2 і 6:

Третя монета пройде лабіринт наступним шляхом шляху, і гравець отримає іграшки з вершин 5 та 7:

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

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

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

3

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

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

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

-1

Коментарі

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