eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Олімпійські Авіалінії

Олімпійські Авіалінії

Імператор Олімпії вирішив з’єднати \textbf{N} міст імперії повітряним транспортом. Придворному програмісту було наказано написати програму під назвою \textit{ОлімпБуд}, яка спрощує процес побудови карти авіарейсів. Ця програма має виконувати операції двох типів, кожна з яких залежить від трьох параметрів \textbf{A}, \textbf{B }і \textbf{C}: \begin{enumerate} \item Створити новий рейс з міста \textbf{A }до міста \textbf{B}, переліт по якому триває \textbf{C} хвилин. \item Розглянути всі авіарейси, які починаються в місті \textbf{A}. Нехай рейс номер \textbf{i }з них закінчується у місті \textbf{v_i} та триває \textbf{t_i} хвилин. Для кожного такого \textbf{i }створити рейс з міста \textbf{B }до міста \textbf{v_i}, який триває \textbf{t_i} + \textbf{С} хвилин. \end{enumerate} Після виконання всіх операцій програма має для кожного міста знайти найменший час, потрібний для перельоту до нього зі столиці, можливо з пересадками в інших містах. Вважається, що час посадки, висадки та очікування в аеропорту рівний нулю. Між двома містами може бути більше одного рейсу, причому перельоти по них можуть займати різну кількість часу. Можливе існування рейсів, які починаються і закінчуються в одному і тому самому місті. Всі рейси односторонні, тобто наявність прямого рейсу з міста \textbf{A} до міста \textbf{B} ще не гарантує, що існує прямий рейс з міста \textbf{B }до міста \textbf{A}. Напишіть програму, яка за послідовністю з \textbf{M} операцій описаних вище типів, виконаних програмою \textit{ОлімпБуд}, для кожного міста, окрім столиці, знайде найменший час, що потрібен для перельоту зі столиці до цього міста. \InputFile Перший рядок містить два цілих числа \textbf{N }і \textbf{M }(\textbf{2 }≤ \textbf{N }≤ \textbf{10^5}, \textbf{1 }≤ \textbf{M }≤ \textbf{10^5}) - кількість міст в імперії Олімпія та кількість операцій, виконаних програмою \textit{ОлімпБуд}. У кожному з наступних \textbf{M }рядків міститься інформація про чергову операцію. Перше число в рядку рівне \textbf{1}, якщо виконувана операція має перший тип, і \textbf{2}, якщо другий. Далі записані три цілих числа \textbf{A}, \textbf{B }та \textbf{C }(\textbf{1 }≤ \textbf{A }≤ \textbf{N}, \textbf{1 }≤ \textbf{B }≤ \textbf{N}, \textbf{-10^8} ≤ \textbf{C }≤ \textbf{10^8}), значення яких описано вище. Міста нумеруються числами від \textbf{1} до \textbf{N}; столиця має номер \textbf{1}. Гарантується, що час перельоту по кожному з рейсів буде \textit{строго додатним}. \OutputFile Вивести \textbf{N - 1} рядок. У \textbf{i}-му з них має міститись найменший час у хвилинах, за який можна долетіти зі столиці у місто з номером \textbf{i + 1}. Якщо до якогось міста дістатись неможливо, то виведіть у відповідному рядку число \textbf{-1}.
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
4 3
1 1 2 10
2 1 3 -9
1 1 3 8
Вихідні дані #1
9
8
-1
Автор Ярослав Твердохліб
Джерело 2013 XXVI Всеукраїнська олімпіада з інформатики, Луганськ, Березень 17 - 21, тур 1