кратчайшие пути

25 задач
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

Беси устала от холодной зимы и решила выбраться на каникулах в
местечко потеплее. К несчастью коров перевозит только Air Bovinia.

Air Bovinia имеет N самолётов (1 <= N <= 1000), каждый из которых
летает по специфическому маршруту, состоящему
из двух или более городов. Например, самолёт может
лететь по маршруту, который начинается в городе 1,
затем летит в город 5. затем в город 2, и потом
в город 8. Никакой город не появится в этом маршруте 2 или
более раз. Если Беси выбрала маршрут, она может сесть на самолёт
в любом городе маршрута и выйти из самолёта
в любом городе маршрута. Например, она не обязана садиться
в первом городе маршрута а выходить в последнем городе
маршрута. Каждый маршрут имеет свою цену и Беси
должна платить её всю вне зависимости от количества городов,
которые она посетит на маршруте. Если Беси
использует некоторый маршрут несколько раз за время
путешествия (то есть, она покидает маршрут,
и позднее возвращается на него из другого города), она должна
платить за каждый раз когда она использует маршрут.

Беси хочет определить самый дешёвый способ пропутешествовать
от её фермы (города A) до выбранного «тёплого местечка»
(города B). Пожалуйста, помогите ей определить минимальную
цену, которую она должна заплатить и также минимальное
количество разных полётов, которые она должна использовать,
чтобы достичь этой минимальной цены.

Формат входных данных

Первая строка ввода содержит A,B, N, разделённые одиночными
пробелами.

Следующие 2N строк описывают доступные маршруты, по две строки
на маршрут. Первая строка содержит стоимость маршрута (целое
число в диапазоне 1.. 1,000,000,000) и количество
городов на маршруте (целое число в диапазоне 1..100).
Вторая строка содержит список городов в порядке следования
по маршруту. Каждый город обозначается целым числом в
диапазоне 1..1000.

Рекомендуется использовать 64-битные целые.

Формат выходных данных

Выведите минимальную цену путешествия Беси из города A в город B,
а также минимальное количество полётов, требующихся для достижения
этой минимальной цены. Если решение не существует, выводите -1 -1

Беси и её сестра Эльза хотят путешествовать от амбара
к любимому полю, так чтобы уходит в одно и то же время от
амбара и приходить в одно и то же время к любимому полю.

Ферма представляет собой N полей (1 <= N <= 16), пронумерованных
от 1 до N, где поле 1 – амбар, а поле N – любимое поле.

Ферма построена на склоне холма и поле X будет выше, чем поле Y,
если X каждая дорожка довольно крутая, можно двигаться только вниз.
Например, по дорожке, соединяющей поля 5 и 8 можно двигаться
только от поля 5 к полю 8 и нельзя в противоположном направлении.
Каждая пара полей соединена не более чем одной дорожкой, поэтому
M <= N(N-1)/2.

Беси и Эльза тратят разное количество времени на прохождение
дорожек. Например, Беси нужно 10 единиц времени, чтобы пройти
некоторую дорожку, а Эльзе – 20. Кроме того, они всегда проходят
поля за нулевое время.

Пожалуйста, помогите определить минимальное время, которое
потребуется Беси и Эльзе чтобы достичь любимого поля в один
и тот же момент времени.

Формат входных данных

Первая строка ввода содержит N и M, разделённые одиночным
пробелом.

Каждая из последующих M строк описывает некоторую дорожку
четырьмя целыми числами A B C D, где A и B (A соединённые дорожкой, C – время, требуемое Беси на прохождение
этой дорожки. D – время, требуемое Эльзе на прохождение этой
дорожки. C и D оба в диапазоне 1..1000.

Вывод (файл meeting.out)
Одно целое число, минимальное время, требуемое Беси и Эльзе
чтобы придти на любимое поле в одно и то же время. Если невозможно,
чтобы Беси и Эльза пришли в одно и то же время, выведите IMPOSSIBLE.

Примечание
Беси в два раза быстрее Эльзы на каждой дорожке,
поэтому если Беси пойдёт по пути 1->2->3, а Эльза – по пути 1->3,
они придут в одно и то же время.

Устав от холодной зимы Беси хочет на каникулах слетать туда, где потеплее.
Билеты коровам продаёт только Air Bovinia.

Air Bovinia имеет N самолётов (1 <= N <= 500), каждый из которых летит
по специфическому маршруту, состоящему из двух или более городов.
Например, самолёт может стартовать в городе 1, затем лететь в город 5,
затем лететь в город 2, затем лететь в город 8 (конечную точку маршрута).
Никакой город не появляется в маршруте два или более раз. Если Беси
выбрала маршрут, она может сесть на него в любом городе этого маршрута
и выйти из него в любом из последующих городов этого маршрута. Она не
обязана садиться в первом городе, а выходить в последнем городе этого
маршрута. Каждый маршрут имеет определённую цену, которую Беси должна
заплатить, если она использует любую часть маршрута, не зависящую от
количества городов, которые она посетит вдоль маршрута. Также Беси
имеет право использовать один маршрут только один раз, это означает,
что она не может использовать маршрут, а затем позже использовать другую
часть этого же маршрута.

Беси хочет найти самый дешёвый способ добраться от своей фермы (город A)
до своего "тёплого местечка" (город B). Она хочет использовать не более
чем два маршрута. Помогите ей определить минимальную цену путешествия.

Заметим, что единственное отличие этой задачи от предыдущей в том, что Беси
может использовать до двух маршрутов, в отличие от ровно одного маршрута
в предыдущей задаче.

Формат входных данных

Первая строка ввода содержит A, B, N разделённые одиночными пробелами.
Следующие 2N строк описывают доступные маршруты, по две строки на маршрут.
Первая строка содержит стоимость маршрута (целое число в интервале от 1 до 1000)
и количество городов в этом маршруте (целое число от 1 до 500). Вторая
строка содержит список городов в порядке следования в этом маршруте.
Каждый город идентифицируется целым числом в диапазоне от 1 до 10,000.

Формат выходных данных

Выведите минимальную цену путешествия из A в B, использующего не более
чем два маршрута. Если такого решения нет, выведите -1.

Примечание

Используя маршрут 2 добираемся от города 1 до города 3, а затем с помошью
маршрута 1 путешествуем из города 3 в город 2.

п»ї

Коровы сформировали танцевальную команду, а Фермер Джон их хореограф. Последний и самый большой танец включает \(N\) коров (\(2 \le N \le 10^6\)), стоящих в ряд. Каждое движение в танце вовлекает две коровы на расстоянии до \(K\) позиций друг от друга (\(1 \le K < N\)) грациозно прыгающих и приземляющихся в каждой другой позиции.

�меется два типа коров в этом ряду Guernseys и Holsteins. Поэтому ФД задокументировал танец как последовательность двоичных строк длины \(N\) , где a \(0\) представляет Guernsey, a \(1\) представляет Holstein, и вся строка представляет как коровы расположены в ряду.

К несчастью Фермер Нхой (хореограф команды соперников) стёр все строки кроме первой и последней. Поскольку скоро состоится соревнование, ФД должен, не теряя времени, реконструировать танец.

Вам даны две двоичные строки, помогите ФД определить минимальное количество движений в танце.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) и \(K\).

Вторая строка содержит первую двоичную строку.

Третья строка содержит последнюю двоичную строку.

Гарантируется, что обе двоичные строки содержат одинаковое количество единиц.

ФОРМАТ ВЫВОДА (на экран / stdout):

Минимальное количество движений в танце.

ПР�МЕР ВВОДА:

4 1
0111
1110

ПР�МЕР ВЫВОДА:

3

Один возможный танец:

0111 -> 1011 -> 1101 -> 1110

ПР�МЕР ВВОДА:

5 2
11000
00011

ПР�МЕР ВЫВОДА:

3

Один возможный танец:

11000 -> 01100 -> 00110 -> 00011

ПР�МЕР ВВОДА:

5 4
11000
00011

ПР�МЕР ВЫВОДА:

2

Один возможный танец:

11000 -> 10010 -> 00011

ОЦЕН�ВАН�Е:

  • Тесты 4-5: \(K=1\)
  • Тесты 6-7: РћР±Рµ строки имеют РЅРµ более чем \(8\) единиц.
  • Тесты 8-15: \(N\le 5000\)
  • Тесты 16-23: Нет дополнительных ограничений.

Problem credits: Benjamin Qi

Каждая из \(N\) коров (\(1 \leq N \leq 10^5\)) Фермера Джона любит ежедневно прогуливаться вдоль изгороди вокруг пастбища.

Изгородь состоит из \(P\) столбов (\(4 \leq P \leq 2\cdot 10^5\), \(P\) чётное), расположение каждого из них имеет координаты \((x,y)\) на карте фермы (\(0 \leq x, y \leq 1000\)). Каждый столб соединяется с двумя соседними столбами либо горизонтальным, либо вертикальным отрезком. Таким образом вся изгородь может рассматриваться как многоугольник стороны которого параллельны осям координат x или y. Последний столб соединён с первым, поэтому получается замкнутый многоугольник вокруг пастбища. Отрезки изгороди могут пересекаться только в конечных точках, каждый столб принадлежит ровно двум конечным точкам отрезков, и каждые два отрезка, которые имеют общую точку, перпендикулярны.

Каждая корова имеет предпочтительные стартовую и конечную позиции прогулки, которые являются точками где-то вдоль изгороди (возможно в столбе, возможно нет) Каждая корова совершает свою ежедневную прогулку начиная со своей стартовой позиции и заканчивая в своей конечной позиции. Имеется два маршрута, которые корова может выбрать, поскольку изгородь представляет замкнуты цикл. Поскольку коровы ленивы, каждая корова идёт вдоль изгороди в направлении, которое обеспечивает кратчайший путь из начальной точки в конечную. Если оба пути одинаковы, корова может выбрать любое направлении.

Определите расстояние, которое пройдёт каждая корова.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(N\) и \(P\). Каждая из последующих \(P\) строк содержит два целых числа, представляющих позиции столбов изгороди в порядке её обхода по часовой стрелке или против часовой стрелки. Каждая из последующих \(N\) строк содержит 4 целых числа \(x_1\) \(y_1\) \(x_2\) \(y_2\) представляющих стартовую позицию \((x_1, y_1)\) и конечную позицию \((x_2, y_2)\) каждой коровы.

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(N\) целых чисел, задающих расстояние, которое пройдёт каждая корова.

**Замечание: время на тест в этой задаче 3 сек, в 1.5 раза больше чем по умолчанию. Память на тест 512 Мбт, что в два раза больше чем по умолчанию.

Фермер Джон хочет продвинуть свою линию электрических тракторов, создав рекламную сеть электрозарядных станций. Он подготовил \(N\) (\(2\le N\le 5\cdot 10^4\)) интересных точек, пронумеровав их \(1\dots N\), из которых первые \(C\) (\(1\le C < N\)) это зарядные станции, а оставшиеся - станции для посещения во время рекламного путешествия. Эти интересные точки соединены (\(1\le M\le 10^5\)) двунаправленными дорогами, \(i\)-ая из которых соединяет различные точки \(u_i\) и \(v_i\) (\(1\le u_i, v_i\le N\)) и имеет длину \(\ell_i\) миль (\(1\le\ell_i\le 10^9\)).

Электротрактор может путешествовать \(2R\) миль (\(1\le R\le 10^9\)) на одной зарядке, позволяя достичь любую точку в пределах \(R\) миль от зарядной станции. Точка назначения считается хорошо-связной, если она достижима не менее чем из \(K\) (\(1\le K\le 10\)) различных зарядных станций. Ваша задача - помочь ФД определить множество хорошо связных точек назначения.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит пять разделённых одиночными пробелами целых чисел \(N\), \(M\), \(C\), \(R\), \(K\). Каждая из последующих \(M\) строк содержит три разделённых одиночными пробелами целых чисел: \(u_i\), \(v_i\), \(\ell_i\) (\(u_i\neq v_i\)).

Зарядные станции помечены номерами \(1, 2, \ldots, C\). Оставшиеся точки это интересные места для посещения.

ФОРМАТ ВЫВОДА (на экран / stdout):

Сначала выведите количество хорошо связных точек назначения в одной строке. Затем выведите сами хорошо связные точки назначения в возрастающем порядке, каждую на отдельной строке.

**Замечание: Время на тест в этой задаче 4s, в два раза больше чем по умолчанию. Ограничение по памяти для этой задачи 512MB, в два раза больше чем по умолчанию.**

У Фермера Джона \(N\) (\(2\le N\le 2\cdot 10^5\)) тракторов, где -ый трактор может использоваться только в интервале \([l_i,r_i]\) включительно. Интервалы для тракторов имеют левые конечные точки \(\ell_1<\ell_2<\dots<\ell_N\) и правые конечные точки \(r_1<r_2<\dots<r_N\). Некоторые из тракторов специальные.

Два трактора \(i\) и \(j\) называются соседними если \([\ell_i,r_i]\) и \([\ell_j,r_j]\) пересекаются. ФД может перебраться (выполнить трансфер) с одного трактора на любой соседний трактор. Путь между двумя тракторами \(a\) и \(b\) состоит трансферов таких, что первый трактор в последовательности есть \(a\), последний трактор в последовательности есть \(b\) и каждые два трактора в последовательности соседние. Гарантируется ,что имеется путь из трактора \(1\) в трактор \(N\). Длина пути - количество трансферов (или эквивалентно, количество тракторов минус один).

Вам даётся \(Q\) (\(1\le Q\le 2\cdot 10^5\)) запросов, каждый указывает пару тракторов \(a\) и \(b\) (\(1\le a<b\le N\)). Для каждого запроса выведите два целых числа:

  • Длину любого кратчайшего пути между тракторами \(a\) и \(b\).
  • Количество специальных тракторов, таких, что существует как минимум один кратчайший путь из трактора \(a\) в трактор \(b\), содержащий его.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) и \(Q\).

Следующая строка содержит строку длины \(2N\), содержащую символы L и R, представляющие левые и правые конечные точки в отсортированном порядке. Гарантируется, что для каждого префикса этой строки количество символов L превышает количество символов R.

Следующая строка содержит битовую строку длины \(N\), представляющую для каждого трактора, является он специальным или нет.

Каждая из следующих \(Q\) строк содержит два целых числа \(a\) и \(b\), описывающих запрос.

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого запроса выведите два числа, разделённых пробелом.

**Замечание: Время на тест в этой задаче 4 сек, в два раза больше времени на тест по умолчанию.**

Беси на каникулах, она может путешествовать во времени, И нет проблем если две версии Беси встретятся.

В этой стране имеется \(N\) аэропортов, пронумерованных \(1, 2, \ldots, N\) и \(M\) полётов во времени (\(1\leq N, M \leq 200000\)). Полёт \(j\) вылетает из аэропорта \(c_j\) в момент времени \(r_j\), и прибывает в аэропорт \(d_j\) в момент времени \(s_j\) (\(0 \leq r_j, s_j \leq 10^9\), \(s_j < r_j\) - такое возможно!). Кроме того, она должна потратить \(a_i\) времени для пересадки в аэропорту \(i\) (\(1\le a_i\le 10^9\)). Необходимо отметить, что если Беси прилетает в аэропорт \(i\) в момент времени \(s\), она может пересесть на рейс, который отправляется в момент времени \(r\), только если \(r \geq s + a_i\).

Беси начинает в городе \(1\) в момент времени \(0\). Для каждого аэропорта от \(1\) to \(N\), каково минимальное время когда Беси сможет в него попасть?

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(N\) и \(M\).

Следующие \(M\) строк описывают полёты. \(j\)-ая из этих строк содержит \(c_j\), \(r_j\), \(d_j\), \(s_j\) в указанном порядке. (\(1\leq c_j, d_j \leq N\), \(0\leq r_j, s_j \leq 10^9\))

Следующая строка описывает аэропорты - она содержит \(N\) разделённых одиночными пробелами целых чисел \(a_1, \ldots, a_N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

На выводе должно быть \(N\) строк. Строка \(i\) содержит самое раннее время, в которое Беси может добраться в аэропорт \(i\) или -1, если Беси не может добраться в этот аэропорт.

Breakdown#90144
**Обратите внимание: время на тест для этой задачи 3сек, на 50% больше чем по умолчанию. **

Ферма Джона может быть представлена как ориентированный взвешенный граф, с дорогами (дугами), соединяющими различные вершины и вес каждой дуги есть время, которое требуется чтобы проехать по этой дороге. Каждый день Беси любит путешествовать из амбара (вершина \(1\)) в поле (вершина \(N\)), используя ровно \(K\) дорог и хочет добраться до поля как можно быстрее при этих ограничениях. Однако, в некоторой точке, прекращается поддержка дорог и они начинают ломаться одна за другой, становясь непроходимыми. Помогите Беси определить кратчайший путь от амбара до поля во все моменты времени.

Формально, мы начинаем с полного взвешенного ориентированного графа из \(N\) вершин (\(1\le N\le 300\)) и \(N^2\) дуг: одна дуга для каждой пары \((i, j)\) \(1 \le i, j \le N\), заметим, что имеется \(N\) петель (дуг из \(i\) в \(i\)). После каждого удаления выведите минимальный вес из всех путей из \(1\) в \(N\), проходящих ровно \(K\) (необязательно различных) дуг \(2\le K\le 8\)). Заметим, что после \(i\)-го удаленя в графе остаётся \(N^2-i\) дуг.

Вес пути определяется как сумма весов всех дуг в пути. Заметим, что путь может содержать множество вхождений одних и тех же дуг, и одних и тех же вершин, включая \(1\) и \(N\).

ФОРМАТ ВВОДА (с клаватуры / stdin):

Первая строка содержит \(N\) и \(K\).

Следющие \(N\) строк содержат по \(N\) целых чисел каждая. \(j\)-ое целое \(i\)-ой строки есть \(w_{ij}\) (\(1\le w_{ij}\le 10^8\)).

Затем следуют \(N^2\) дополнительных строк, каждая содержит два целых числа \(i\) и \(j\) (\(1\le i,j\le N\)). Каждая пара целых чисел появляется ровно один раз.

ФОРМАТ ВЫВОДА (на экран / stdout):

Ровно \(N^2\) строк, минимальный вес \(K\)-пути после каждого удаления. Если \(K\)-путь не существует, выведите \(-1\).

У Беси есть коллекция связных неориентированных графов \(G_1,G_2,\ldots,G_K\) (\(2\le K\le 5\cdot 10^4\)). Для каждого i (\(1\le i\le K\)), \(G_i\) имеет ровно \(N_i\) (\(N_i\ge 2\)) вершин, помеченных \(1\ldots N_i\) и \(M_i\) (\(M_i\ge N_i-1\)) ребер. Каждый \(G_i\) может содержать циклы, но нет двух и более ребер между парой вершин.

Сейчас Эльза создаёт новый неориентированный граф \(G\) с \(N_1\cdot N_2\cdots N_K\) вершинами, каждая из которых помечена \(K\)-плетом \((j_1,j_2,\ldots,j_K)\), где \(1\le j_i\le N_i\). В \(G\) две вершины \((j_1,j_2,\ldots,j_K)\) и \((k_1,k_2,\ldots,k_K)\) соединены ребром, если для всех i \(1\le i\le K\), \(j_i\) и \(k_i\) соединены ребром в \(G_i\).

Определим расстояние между двумя вершинами в \(G\) которые лежат в одной и той же связной компоненте как минимальное количество ребер на пути из одной вершины в другую. Вычислите сумму расстояний между вершиной \((1,1,\ldots,1)\) и каждой вершиной в этой же компоненте в \(G\) по модулю \(10^9+7\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содердит \(K\), количество графов.

Описание каждого графа начинается с \(N_i\) и \(M_i\) в одной строке, за которой следуют \(M_i\) ребер.

Последовательные графы разделены пустыми строками для читабельности. Гарантируется, что \(\sum N_i\le 10^5\) и \(\sum M_i\le 2\cdot 10^5\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Сумма расстояний от вершины \((1,1,\ldots,1)\) и каждой вершины достижимой от неё по модулю \(10^9+7\).

Telephone#90133
\(N\) коров Фермера Джона, последовательно пронумерованные, \(1 \ldots N\) выстроены в ряд (\(1\le N\le 5\cdot 10^4\)). \(i\)-ая корова имеет идентификатор породы \(b_i\) в интервале \(1 \ldots K\), with \(1\le K\le 50\). Коровы нуждаются в Вашей помощи чтобы узнать, как быстрее передать сообщение от коровы \(1\) корове \(N\).

\(|i-j|\) минут требуется, чтобы передать сообщение от коровы \(i\) к корове \(j\). Однако не все породы готовы взаимодействовать друг с другом, что описано в матрице \(S\) размером \(K \times K\), где \(S_{ij} = 1\) если корова породы \(i\) готова передать сообщение корове породы \(j\) и 0 в противном случае. Необязательно истина то, что \(S_{ij}=S_{ji}\), и даже может быть случай, когда \(S_{ii} = 0\), то есть корова породы \(i\) не будет передавать сообщение корове своей породы.

Определите минимальное количество времени, которое потребуется для передачи сообщения.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) и \(K\).

Следующая строка содержит \(N\) разделённых пробелом целых чисел \(b_1,b_2,\ldots,b_N\).

Следующие \(K\) строк описывают матрицу \(S\). Каждая строка состоит из строки из K бит. \(S_{ij}\) \(j\)-ый бит \(i\)-ой строки сверху.

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите одно целое число - минимальное количество требуемого времени. Если невозможно передать сообщение от коровы \(1\) к корове \(N\), выведите \(-1\).

Имеется \(N\) (\(2\le N\le 2\cdot 10^5\)) миров, каждый с порталом. Изначально, мир \(i\) (for \(1 \leq i \leq N\)) имеет \(x\)-координату \(i\), и \(y\)-координату \(A_i\) (\(1\le A_i\le 10^9\)). В каждом мире есть по одной корове. В момент времени \(0\), все \(y\)-координаты различны и все миры начинают падать. Мир \(i\) двигается непрерывно в отрицательном направлении координаты \(y\) со скоростью \(i\) единиц в секунду.

В любой момент времени, когда два мира находятся на одной и той же \(y\)-координате (возможно в дробное время), порталы "выравниваются". Это означает, что корова из одного из этих миров, может используя эти порталы мгновенно перебраться в другой мир.

Для каждого \(i\) корова из мира \(i\) хочет перебраться в мир \(Q_i\) (\(Q_i\neq i\)). Определите для каждой коровы, сколько времени ей понадобиться, чтобы перебраться в желаемый мир, если она будет путешествовать оптимально.

Ответ на каждый запрос необходимо вывести в виде дроби \(a/b\), где \(a\) и \(b\) положительные и взаимно простые целые числа. Выведите \(-1\) если путешествие невозможно.

ОЦЕНИВАНИЕ:

  • В тестах 2-3 \(N\le 100.\)
  • В тестах 4-5 \(N\le 2000.\)
  • В тестах 6-14 нет дополнительных ограничений.

ФОРМАТ ВВОДА (файл falling.in):

Первая строка ввода должна содержать одно целое число \(N.\)

Следующая строка содержит \(N\) разделённых одиночными пробелами целых числе \(A_1,A_2,\ldots,A_N.\)

Следующая строка содержит \(N\) разделённых одиночными пробелами целых чисел \(Q_1,Q_2,\ldots,Q_N.\)

ФОРМАТ ВЫВОДА (файл falling.out):

Выведите \(N\) строк, \(i\)-th из которых содержит длину пути для коровы \(i.\)

Shortcut#90064
Каждый день фермер Джон звонит в гигантский колокол, созывая своих коров в амбар на обед. Все коровы идут кратчайшим путём.

Ферма описывается как \(N\) полей (\(1 \leq N \leq 10,000\)), последовательно пронумерованных \(1 \ldots N\), амбар находится в поле 1. Поля соединены \(M\) двунаправленными тропинками (\(N-1 \leq M \leq 50,000\)). С каждой тропинкой ассоциировано время её прохождения, и от любого поля имеется путь к амбару, состоящий из некоторого множества тропинок.

Поле \(i\) содержит \(c_i\) коров. Услышав колокол, все коровы двигаются к амбару так, чтобы потратить минимальное количество времени. Если имеется несколько путей с минимальным временем, коровы выбирают "лексикографически минимальный" путь. Например, путь через поля 7,3,6,1 лексикографически минимальнее, чем путь 7,5,1.

ФД хочет сократить общее время движения (сумму времён движения всех коров) как можно больше добавлением одной сокращающей тропинки, которая имеет время прохождения \(T\) (\(1 \leq T \leq 10,000\)), от амбара (поле 1) до другого поля, которое он выберет. Если корова встретится с этой сокращающей тропинкой на своём обычном пути, тогда корова пойдёт по этой тропинке, если в результате уменьшится время её прихода в амбар. Иначе, корова пойдёт по своему обычному маршруту, даже если бы она могла уменьшить своё время в пути, используя сокращающую тропинку.

Помогите ФД определить наибольшую величину уменьшения суммарного времени движения, которое он может достичь добавлением сокращающей тропинки.

ФОРМАТ ВВОДА (файл shortcut.in):

Первая строка ввода содержит \(N\), \(M\), \(T\). Каждая из \(N\) последующих строк содержит \(c_1 \ldots c_N\) - целое число в интервале \(0 \ldots 10,000\). Каждая из последующих \(M\) строк описывает тропинку тремя целыми числами \(a\), \(b\), \(t\), обозначающими, что поля \(a\) и \(b\) соединены тропинкой время прохождения которой равно \(t\). Все времена в интервале \(1 \ldots 25,000\).

ФОРМАТИ ВВОДА (файл shortcut.out):

Выведите наибольшее возможное сокращение суммарного времени движения, которое может добиться ФД.

Фермер Джон недавно купил новую ферму, чтобы расширить свою империю производства молока. Новая ферма соединена с ближайшим городом сетью труб, и ФД хочет вычленить наилучшее подмножество этих труб для покупки с целью передачи молока с фермы в город.

Сеть труб описывается \(N\) точками соединения (конечными точками труб), последовательно пронумерованных \(1 \ldots N\) (\(2 \leq N \leq 1000\)). Точка соединения 1 представляет новую ферму Джона, а точка соединения \(N\) представляет город. Имеется \(M\) двунаправленных труб (\(1 \leq M \leq 1000\)), каждая их которых соединяет две точки соединения. \(i\)-ая труба стоит \(c_i\) долларов и может поддерживать передачу молока со скоростью \(f_i\) литров в секунду.

ФД хочет купить один путь (самый выгодный) из труб, конечными точками которого будут точки \(1\) и \(N\). Стоимость пути равна сумме стоимостей труб вдоль этого пути. Скорость передачи молока по пути равна минимальной из скоростей передачи труб (минимальное звено будет узким местом пути). ФД хочет максимизировать скорость передачи, делённую на стоимость пути. Гарантируется существование пути из \(1\) в \(N\).

ОЦЕНИВАНИЕ:

  • Тесты 2-5 удовлетворяют \(N,M\le 100.\)

ФОРМАТ ВВОДА (файл pump.in):

Первая строка ввода содержит \(N\) and \(M\). Каждая из последующих \(M\) строк описывает трубу четырьмя целыми числами \(a\) и \(b\) (две различные точки соединения, соединёнными этой трубой), \(c\) (её стоимость), \(f\) (её производительность - скорость передачи молока). \(c\) и \(f\) оба положительные целые числа в интервале \(1 \ldots 1000\).

ФОРМАТ ВЫВОДА (файл pump.out):

Выведите оптимальное значение, умноженное на \(10^6\), обрезанное до целого (то есть округлённое вниз до ближайшего целого числа, если это число не целое).

Коровы возвращаются в амбар в конце длинного дня и чувствуют себя усталыми и голодными.

Ферма состоит из \(N\) пастбищ (\(2 \leq N \leq 50,000\)), последовательно пронумерованных \(1 \dots N\). Коровы хотят добраться до амбара в пастбище \(N\). Каждое из остальных \(N-1\) пастбищ содержит ровно 1 корову. Коровы могут двигаться от пастбища к пастбищу по множеству из \(M\) ненаправленных дорожек (\(1 \leq M \leq 100,000\)). \(i\)-ая дорожка соединяет пару пастбищ \(a_i\) и \(b_i\), и требуется \(t_i\) единиц времени для её прохождения. Каждая корова может достичь амбара, пройдя некоторую последовательность дорожек.

Будучи голодными, коровы заинтересованы в остановках для еды на их пути домой. К счастью, \(K\) пастбищ содержат стоги сена (\(1 \leq K \leq N\)), \(i\)-ый из этих стогов сена имеет величину вкусности \(y_i\). Каждая хочет съесть один такой стог сена по дороге в амбар, но только если время, которое добавиться к её пути, не больше чем вкусность стога, который она съест. Заметим, что корова может съесть не более одного стога сена. Если на её пути встретятся другие пастбища со стогами, она просто игнорирует их.

ФОРМАТ ВВОДА (файл dining.in):

Первая строка содержит три разделённых пробелом целых числа \(N\), \(M\), \(K\). Каждая из последующих \(M\) строк содержит три целых числа \(a_i\), \(b_i\), \(t_i\), описывающих дорожку между пастбищами \(a_i\) и \(b_i\), на прохождение которой требуется \(t_i\) времени (\(a_i\) и \(b_i\) отличаются друг от друга, а \(t_i\) - положительное целое число не более чем \(10^4\)).

Каждая из следующих \(K\) строк описывает стог сена двумя целыми числами: индекс пастбища и вкусность стога (положительное целое число не более \(10^9\)). Множество стогов сена может располагаться на одном и том же пастбище.

ФОРМАТ ВЫВОДА (файл dining.out):

Вывод должен содержать \(N-1\) строку. Строка \(i\) содержит одно целое число \(1\), если корова на пастбище \(i\) может посетить пастбище со стогом сена и съесть это стог и 0, в потивном случае.

У Беси и Эльзы по N (\(1 \leq N \leq 10^5\)) пирогов. Каждый из \(2N\) пирогов имеет величину вкусности по мнению Беси и величину вкусности (возможно отличающуюся) по мнению Эльзы.

Беси хочет отдать один из своих пирогов Эльзе. Если Эльза получит пирог от Беси, она должна будет отдать один из своих пирогов Беси. Чтобы не оказаться ни скупой, ни щедрой, Эльза постарается выбрать пирог, как минимум, такой же вкусный (по мнению Эльзы) как она получила, но не более чем на \(D\) единиц вкуснее (\(0 \leq D \leq 10^9\)). Такой пирог может не существовать, в этом случае Эльза сбежит в Японию.

Но если Эльза отдаст Беси пирог взамен, то Беси аналогично постарается отдать Эльзе пирог, как минимум такой же вкусный (по мнению Беси), но не более чем на \(D\) единиц вкуснее, чем кусок, который она получила. Если Беси не сможет, то тоже сбежит. Иначе отдаст кусок Эльзе. Этот цикл продолжается, пока возможно, или пока одна из коров не получит кусок с величиной вкусности равной \(0\), в этом случае процесс заканчивается и обе коровы счастливы.

Заметим, что один и тот же кусок не может быть подарен дважды, и кусок не может вернуться той корове, которая его дарила.

Для каждого из \(N\) кусков Беси может выбрать его как начальный подарок Эльзе. Определите минимальное количество кусков, которые могут быть подарены так, чтобы обе коровы оказались счастливы.

ФОРМАТ ВВОДА (файл piepie.in):

Первая строка содержит два целых числа \(N\) и \(D\).

Следующие \(2N\) строк содержат по два целых числа, разделённых пробелом, соответственно обозначающие вкусность данного куска по мнению Беси и по мнению Эльзы.

Первые \(N\) строк о кусках Беси, а оставшиеся \(N\) строк о кусках Эльзы.

Гарантируется, что все величины вкусности в интервале \([0,10^9]\).

ФОРМАТ ВЫВОДА (файл piepie.out):

На выводе должно быть \(N\) строк. Строка \(i\) должна содержать одно целое число: минимальное количество кусков, которое может быть подарено при счастливом исходе, если Беси начнёт с куска \(i\). Если счастливый исход при начале с куска \(i\) невозможен, то строка \(i\) должна содержать \(-1\).

Фермер Джон недавно купил новую машину с двумя навигационными
системами GPS. Что ещё хуже, они часто конфликтуют при выборе
Маршрута.

Карта региона, в котором живёт ФД представляет собой N перекрёстков
(2 <= N <= 10,000) и M двунаправленных дорог (1 <= M <= 50,000).
Дорога I соединяет перекрёстки Ai (1 <= Ai <= N) и Bi (1 <= Bi <= N).

Множество дорого может соединять одну и ту же пару перекрёстков.
Двунаправленные дороги представлены двумя раздельными
однонаправленными дорогами в противоположных направлениях.

Дом ФД находится в перекрёстке 1, а его ферма распложена в перекрёстке
N. Существует путь из дома на ферму, по серии однонаправленных дорог.

Обе GPS-системы используют карту описанную выше, однако они дают
различные значения времени проезда по каждой дороге. Дорога I
требует Pi единиц времени по первой GPS-системе и Qi единиц времени
по второй (каждая из величин – целое число в интервале 1..100,000).

ФД хочет проехать от дома до фермы. Однако каждая GPS-система громко
оповещает ФД каждый раз, когда ФД выбирает дорогу (например, от
перекрёстка X до перекрёстка Y) которую GPS не считает частью
кратчайшего пути от X до фермы (возможно даже что предупреждение
выдают обе GPS-системы, если ФД выбирает дорогу, которую каждая из
GPS считает не принадлежащей к кратчайшему маршруту).

Пожалуйста, помогите ФД определить минимальное количество предупреждений,
которое он может получить соответствующим выбором маршрута.
Если две SPS-системы предупреждают одновременно, к ответу в этом случае
нужно прибавлять число 2.

PROBLEM NAME: gpsduel

Формат ввода:

* Строка 1: целые числа N и M.
* Строка 2-N+1: Строка i описывает дорогу i четырьмя
целыми числами: Ai Bi Pi Qi.

Примечание

Всего имеется 5 перекрёстков и 7 однонаправленных дорог. Первая
дорога идёт от перекрёстка 3 к перекрёстку 4, первая GPS считает,
что нужно 7 единиц времени для проезда по этой дороге, а вторая GPS
- полагает, что требуется одна единица времени.

Формат вывода:

* Строка 1: Минимальное количество предупреждений, которое
может получить ФД при оптимальном проезде от дома до фермы.

Примечание

Если ФД выберет путь 1 -> 2 -> 4 -> 5, тогда первая GPS пожалуется на
дороге 1->2 (она предпочитает путь 1>3). Однако в остальной части маршрута
2 -> 4 -> 5, обе GPS промолчат, поскольку обе считают такой маршрут
кратчайшим от 2 до 5.

Roadblock#89923
Problem 2: Roadblock [Brian Dean]
Каждое утро Фермер Джон по ферме от своего дома к амбару. Ферма это коллекция из N полей (1<=N<=250), соединённых M двунаправленными дорожками (1<=M<=25,000) определённой длины. Дом фермера находится на поле 1, а амбар – на поле N. Никакие два поля не соединены более чем одной дорожкой. И существует путь (как последовательность дорожек) из любого поля к любому. Перемещаясь от поля к полю, ФД всегда выбирает маршрут, состоящий из последовательности дорожек, имеющих наименьшую общую длину. Коровы «вредничают». Они планируют построить стог сена ровно на одной из M дорожек, тем самым увеличив вдвое её длину. Коровы хотят выбрать такую дорожку, чтобы максимизировать увеличение маршрута ФД от дома к амбару. Помогите коровам определить, насколько они могут удлинить маршрут ФД.
PROBLEM NAME: rblock
Формат входных данных
* Строка 1: Два разделённых пробелом целых числа, N и M.
* Строки 2..1+M: Строка j+1 описывает j-ую двунаправленную дорожку тремя разделёнными пробелами числами Aj Bj Lj, где Aj и Bj это числа в диапазоне1..N, указывающие поля, соединённые этой дорожкой, а L – длина этой дорожки (в диапазоне 1...1,000,000).
Формат выходных данных
* Строка 1: Максимально возможное увеличение длины кратчайшего маршрута ФД, которого можно достичь удвоением длины одной дорожки.
Примечание
Если коровы удвоят длину дорожки из поля 3 в поле 3 (от 3 до 6), тогда кратчайший маршрут ФД станет 1-3-5 с длиной 1+7=8, что увеличивает на 2 первый кратчайший путь.
Roadblock#89921
Problem 1: Roadblock [Brian Dean]
Каждое утро Фермер Джон по ферме от своего дома к амбару. Ферма это коллекция из N полей (1<=N<=250), соединённых M двунаправленными дорожками (1<=M<=25,000) определённой длины. Дом фермера находится на поле 1, а амбар – на поле N. Никакие два поля не соединены более чем одной дорожкой. И существует путь (как последовательность дорожек) из любого поля к любому. Перемещаясь от поля к полю, ФД всегда выбирает маршрут, состоящий из последовательности дорожек, имеющих наименьшую общую длину. Коровы «вредничают». Они планируют построить стог сена ровно на одной из M дорожек, тем самым увеличив вдвое её длину. Коровы хотят выбрать такую дорожку, чтобы максимизировать увеличение маршрута ФД от дома к амбару. Помогите коровам определить, насколько они могут удлинить маршрут ФД.
PROBLEM NAME: rblock
Формат входных данных
* Строка 1: Два разделённых пробелом целых числа, N и M.
* Строки 2..1+M: Строка j+1 описывает j-ую двунаправленную дорожку тремя разделёнными пробелами числами Aj Bj Lj, где Aj и Bj это числа в диапазоне1..N, указывающие поля, соединённые этой дорожкой, а L – длина этой дорожки (в диапазоне 1...1,000,000).
Формат выходных данных
* Строка 1: Максимально возможное увеличение длины кратчайшего маршрута ФД, которого можно достичь удвоением длины одной дорожки.
Примечание
Если коровы удвоят длину дорожки из поля 3 в поле 3 (от 3 до 6), тогда кратчайший маршрут ФД станет 1-3-5 с длиной 1+7=8, что увеличивает на 2 первый кратчайший путь.

Air Bovinia планирует соединить N ферм (1 <= N <= 200), в которых живут
коровы. K из этих ферм выбраны как хабы (1 <= K <= 100, K <= N).
Фермы пронумерованы от 1 до N, при этом фермы 1..K являются хабами.

Сейчас имеется M (1 <= M <= 10,000) однонаправленных полётов.
Полёт I происходит из фермы ui в ферму vi, с ценой di долларов
(1 <= di <= 1,000,000).

Авиакомпания получила требование на Q (1 <= Q <= 10,000)
однонаправленных путешествий. I-ое путешествие из фермы ai в ферму bi.
Путешествие может включать любую последовательность прямых перелётов,
(возможно даже посещая одну и туже ферму несколько раз),
но эта последовательность должна включать как минимум один хаб
(который может быть а может и не быть в ферме старта или назначения).
Следствием последнего требования может быть отсутствие корректного
маршрута из ai в bi. Для всех остальных путешествий Ваша цель
помочь Air Bovinia определить минимальную стоимость корректного маршрута.

PROBLEM NAME: vacation

Формат входных данных

* Строка 1: Четыре целых числа: N, M, K, Q.

* Строки 2..1+M: Строка i+1 содержит ui, vi, di для полёта i.

* Строки 2+M..1+M+Q: Строка 1+M+i описывает i-ое путешествие в терминах ai bi

Формат выходных данных

* Строка 1: Количество путешествий (из Q) для которых существует
корректный маршрут

* Строка 2: Сумма всех корректных минимальных маршрутов.

Примечание

Путешествие из 3 в 2 может быть осуществлено единственным способом
с ценой 10+7. путешествие из 2 в 3 невозможно, поскольку из 2 нет
ни одного полёта. Путешествие из 1 в 2 возможно единственным способом
с ценой 7.

Поделиться
Класснуть