графы

162 задачи
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Владения Фермера Джона состоят из \(N\) лугов и \(M\) дорожек, соединяющих пары лугов.

Беси хочет сделать трассу по соседним фермам. Ферма - это подмножество из двух или более лугов, при том, что каждый луг достижим из любого другого с помощью уникальной последовательности дорожек.

Farmland может состоять из множества ферм. Пусть имеется \(K\) ферм. Беси хочет сделать гоночный цикл, соединив \(K\) ферм добавлением \(K\) дорожек с длиной \(X\). Каждую ферму необходимо посетить ровно раз и пройти как минимум по одной дороге каждой фермы.

Для того, чтобы сделать трассу более интересной для гонщиков, общая длина трассы должна быть не менее \(Y\). Беси хочет узнать длины всех подходящих под эти ограничения трасс. Трасса считается отличающейся от другой, если есть два соседних луга (после добавления дорожек между фермами) в одной трассе, которые не являются соседними в другой. Заметим, что имеют значение только выбранные дорожки, а не направление движения по этим дорожкам.

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

Первая строка ввода содержит \(N\), \(M\), \(X\), \(Y\) где \(1 \leq N \leq 1500\), \(1 \leq M \leq N-1\), and \(0 \leq X, Y \leq 2500\).

Каждая из последующих \(M\) строк описывает дороги. Строки имеют вид: \(A_i\) \(B_i\) \(D_i\), означающие, что луга \(A_i\) и \(B_i\) связаны дорожкой с целое длиной \(D_i\) (\(1 \leq A_i, B_i \leq N\), \(0 \leq D_i \leq 2500\)). Каждый луг связан как минимум с одной дорогой, отсутствуют циклы.

В не менее чем 70% тестов гарантируется, что \(N \leq 1000\) и \(Y \leq 1000\).

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

Выведите одно целое число, сумму длин всех подходящих трасс по модулю \(10^9+7\).

Беси и Эльза помогают Фермеру Джону мыть посуду.

Они решили, что Беси будет мыть посуду со средством, а Эльза - полоскать. Беси получила поднос грязных тарелок пронумерованных от \(1\) до \(N\) (\(1 \leq N \leq 10^5\)). Эльза получил пустой поднос, куда она должна выкладывать чистые тарелки. Между Беси и Эльзой имеется поднос тарелок помытых со средством.

На каждом шагу происходит одно из следующих событий

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

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

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

Первая строка ввода содержит \(N\). Следующие \(N\) строк указывают порядок тарелок в стеке Беси, первое число соответствует вершине стека.

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

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

Фермер Джон построил \(N\) (\(1 \leq N \leq 10^5\)) ферм, соединённых \(N-1\) дорогами, формируя дерево (то есть, каждая ферма достижима от любой другой, и отсутствуют циклы). Каждая ферма содержит коров, чья марка Guernsey или Holstein.

\(M\) друзей ФД (\(1 \leq M \leq 10^5\)) часто посещают его фермы. Во время визита друга \(i\), ФД идёт с эти другом по уникальному маршруту от фермы \(A_i\) до фермы \(B_i\) (возможен случай, когда \(A_i = B_i\)). Дополнительно они могут попробовать некоторое количество молока вдоль пути, по которому они идут. Поскольку большинство друзей ФД сами фермеры, у них есть сильные предпочтения по молоку. Некоторые из его друзей пьют молоко только коров Guernsey, а оставшиеся пьют только молоко Holstein. Любой из друзей ФД будет счастлив только если он сможет попить предпочитаемое молоко во время визита.

Определите, каждый ли друг останется счастлив после визита.

ОЦЕНИВАНИЕ:

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

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

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

Вторая строка содержит строку длину длины \(N\). \(i\)-ый символ строки есть 'G' если корова на \(i\)-ой ферме Guernsey, или 'H', если корова на \(i\)-ой ферме Holstein.

Каждая их следующих \(N-1\) строк содержит два целых числа \(X\) и \(Y\) (\(1 \leq X, Y \leq N\)), указывающих, что существует дорога между фермами \(X\) и \(Y\).

Последующие \(M\) строк содержат целые числа \(A_i\), \(B_i\) и символ \(C_i\). \(A_i\) и \(B_i\) представляют конечные точки пути \(i\)'-го друга, а \(C_i\) либо G либо H - тип молока, предпочитаемый \(i\)-ым другом.

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

Выведите двоичную строку длины \(M\). \(i\)-ый символ строки должен быть '1' если \(i\)-ый друг будет счастлив, или '0' в противном случае.

Фермер Джон планирует построить \(N\) (\(1 \leq N \leq 10^5\)) ферм, которые будут соединены \(N-1\) дорогой, формируя дерево (то есть каждая ферма достижима от каждой, и нет циклов). Каждая ферма содержит корову целого типа \(T_i\) между \(1\) и \(N\) включительно.

\(M\) друзей ФД (\(1 \leq M \leq 10^5\)) часто его посещают. Во время визита друга \(i\), ФД вместе с ним путешествует по уникальному пути от фермы \(A_i\) до фермы \(B_i\) (возможно \(A_i = B_i\)). Дополнительно, они пробуют молоко каждой коровы на своём пути. Поскольку друзья ФД также фермеры, они имеют сильное предпочтение по молоку. Каждый из них пьёт молоко только определённого типа коров. Любой из друзей ФД будет счастливым, только если сможет попить свой предпочитаемый тип молока во время пути.

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

ОЦЕНИВАНИЕ:

  • Тест 2 второй пример, приведенный ниже.
  • Тест 3 удовлетворяет \(N\le 10^3, M\le 2\cdot 10^3\).
  • Тесты 4-7 удовлетворяют \(C_i\le 10\) (\(C_i\) определено ниже).

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

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

Вторая строка ввода содержит \(N\) разделённых целых чисел \(T_1,T_2,\ldots, T_N\). Тип коровы на \(i\)-ой ферме обозначен \(T_i\).

Каждая из последующих \(N-1\) строк содержит два различных целых числа \(X\) и \(Y\) (\(1 \leq X, Y \leq N\)), указывающих, что имеется дорожка между фермами \(X\) и \(Y\).

Последующие \(M\) строк содержат целые числа \(A_i\), \(B_i\), \(C_i\). \(A_i\) и \(B_i\) представляют конечные точки пути во время визита \(i\)-ого друга, \(C_i\) (\(1\le C_i\le N\)) указывает тип молока, предпочитаемый этим другом.

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

Выведите двоичную строку длины \(M\). \(i\)-ый символ этой строки должен быть '1', если \(i\)-ый друг будет счастлив, иначе - '0'.

Коровы играют в игру "Moo".

Игра Moo происходит на решётке из \(N \times N\) квадратных ячеек, в которые коровы вписывают свой ID (числовой).

В конце игры каждая ячейка содержит некоторое число. Корова выиграла игру, если она создала самый большой регион из соседних ячеек. Регион определяется как группа ячеек с одним и тем же числовым ID и каждая ячейка региона является непосредственной соседкой другой клетки региона сверху, снизу, слева или справа (по диагонали не считается!).

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

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

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

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 250\)). Следующие \(N\) строк содержат по \(N\) целых чисел (каждое в интервале \(0 \ldots 10^6\)), описывающих финальное положение игры. Как минимум два различных числа присутствуют на доске.

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

Первая строка вывода должна содержать размер максимального региона для одной коровы, а вторая строка должна содержать размер максимального региона из двух коров.

\(N\) коров (\(1 \leq N \leq 10^5\)), фермера Джона, пронумерованных \(1 \ldots N\), разработали социальную иерархию, в соответствии с которой ФД доит их каждое утро.

ФД сделал \(M\) наблюдений об этой структуре (\(1 \leq M \leq 50,000\)). Каждое наблюдение - упорядоченный список некоторых из его коров, указывающий что их нужно доить именно в таком порядке. Например список 2 5 1 означает, он должен подоить корову 2, некоторое время спустя - корову 5 и некоторое время после - корову 1.

Наблюдения ФД приоритезированы, поэтому его цель - максимизировать значение \(X\) так, чтобы выполнились условия первых \(X\) наблюдений. Если несколько порядков дойки могут удовлетворять \(X\) наблюдениям, он выбирает тот, в котором корова с меньшим номером доится раньше. Иными словами, если несколько порядков дойки удовлетворяют этим условиям, ФД выбирает лексикографически наименьший. Порядок \(x\) является лексикографически меньшим, чем порядок \(y\), если для некоторого \(j\), , \(x_i = y_i\) для всех \(i < j\) и \(x_j < y_j\) (другими словами два порядка идентичны до некоторой точки, в которой \(x\) меньше чем \(y\)).

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

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

Первая строка содержит числа \(N\) и \(M\). Каждая из следующих \(M\) строк описывает одно наблюдение. Строка \(i+1\) описывает наблюдение \(i\) и начинается с количества коров \(m_i\) в этом наблюдении, за которым следует список из \(m_i\) целых чисел, определяющих порядок коров в этом наблюдении. Сумма \(m_i\) не превышает \(200,000\).

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

Выведите \(N\) разделённых пробелом целых чисел дающих перестановку чисел of \(1 \ldots N\), содержащую порядок в котором ФД должен доить своих коров.

\(N\) коров (\(2 \leq N \leq 100\)) Фермера Джона, последовательно пронумерованных \(1 \ldots N\) разработали структуру утреннего доения. Она основывается на двух ключевых свойствах:

1. Некоторые коровы настаивают чтобы их доили раньше - в соответствии с их социальным статусом. Например, корова 3 имеет наивысший статус, корова 3 имеет средний статус, а корова 5 имеет низкий статус, то корову 3 нужно доить первой, затем корову 2 и затем корову 5.

2. Некоторые коровы могут настаивать, чтобы их доили в определённой позиции внутри порядка. Например, корова 4 может настаивать, чтобы её доили второй среди всех коров.

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

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

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

Первая строка содержит \(N\), \(M\) (\(1 \leq M < N\)), \(K\) (\(1 \leq K < N\)), указывающая, что у ФД \(N\) коров, \(M\) из которых организованы в социальную иерархию, \(K\) из которых требуют, чтобы их подоили в определённой позиции порядка. Следующая строка содержит \(M\) различных целых чисел \(m_i\) (\(1 \leq m_i \leq N\)). Коровы, представленные в этой строке должны доиться в порядке, в котором они появились в этой строке. Следующие \(K\) строк содержат по по два целых числа \(c_i\) (\(1 \leq c_i \leq N\)) и \(p_i\) (\(1 \leq p_i \leq N\)), указывающих, что корова \(c_i\) должна быть подоена на позиции \(p_i\).

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

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

Выведите самую раннюю позицию, на которой можно подоить корову 1.

Фермер Джон имеет стадо из нескольких поколений коров. Анализируя записи ФД хочет установить, в каком родстве коровы находятся друг к другу. Помогите ему.

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

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100\)) за которым следуют имена двух коров. имнеа - строки не более чем из 10 символов (больших латинских букв - \(A \ldots Z\)). ФД интересуется родством этих двух коров.

Каждая из следующих \(N\) строк содержит имена двух коров \(X\) and \(Y\), означающих, что корова \(X\) - мама коровы \(Y\)

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

Вы должны вывести одну строку, указывающую родство между двумя коровами, указанными в первой строке ввода. Для простоты назовём их сейчас Беси и Эльза - для последующих примеров. Возможны следующие типы родства:
  • Вы должны вывести "SIBLINGS" если Беси и Эльза имеют одну и ту же маму.
  • Беси может быть прямой наследницей Эльзы, тогда Эльза может быть mother, grand-mother, great-grand-mother, great-great-grand-mother, etc., для Беси. В этом случае вы должны выводить: "ELSIE is the (родство) of BESSIE", где (родство) например "great-great-grand-mother".
  • Если Эльза не предшественница или сестра Беси, но она ребёнок предшественницы Беси, тогда Эльза является тётей для Беси. Вы должны вывести "ELSIE is the aunt of BESSIE" если Эльзя - ребёнок для grand-mother Беси "ELSIE is the great-aunt of BESSIE" если эльза ребёнок great-grand-mother Беси "ELSIE is the great-great-aunt of BESSIE" если Эльза ребёнок great-great-grand-mother Беси и т.д.
  • Если Беси и Эльза состоят в других родственных отношениях, например, если у них есть общий предшественник, то они кузины и Вы должны вывести "COUSINS"
  • Вы должны вывести "NOT RELATED", если у Беси и Эльзы нет общего предка и никто не является наследником друг друга.

Следующая диаграмма помогает иллюстрировать отношения, описанные выше. Заметим, что некоторые из них Вы не рассматриваете, например "niece" (дочь сестры), поскольку если Беси "niece" для Эльзы, то Эльза "aunt" для Беси.

MooTube#90022
Во время отдыха, Фермер Джон создал новый видео-сервис, который он назвал MooTube. На MooTube коровы ФД могут записывать видео, делится ими, и открывать новые интересные видео. Его коровы уже разместили \(N\) видео (\(1 \leq N \leq 5000\)), последовательно пронумерованных \(1 \ldots N\).

ФД хочет создать список "предлагаемых видео" для каждого видео на MooTube, который будет рекомендовать видео, наиболее релевантные тем, которые коровы посмотрели.

ФД ввёл "метрику релевантности", которая определяет насколько релевантны два видео друг другу. Он выбрал \(N-1\) пар видео и вручную вычислил их релевантность. Затем ФД визуализировал свои видео в виде сети, где каждое видео-вершина, а рёбра проведены между парами вершин-видео, для которых он проводил анализ релевантности. Оказалось, что ФД выбрал пары так, что любое видео достижимо от любого другого по этим рёбрам, причём единственным способом. Теперь ФД определил релевантность любой пары видео как минимум из релевантностей рёбер на пути от одного видео к другому.

ФД теперь хочет выбрать такое значение величины \(K\), чтобы при просмотре видео предлагались к просмотру как релевантные как минимум ещё \(K\) видео. Однако он боится, что большое \(K\) снизит надои. Поэтому он просит Вас ответить на вопросы по поводу \(K\).

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

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

Каждая из следующих \(N-1\) строк описывает пару видео, сравненных вручную. Каждая строка включает три целых числа \(p_i\), \(q_i\), и \(r_i\) (\(1 \leq p_i, q_i \leq N, 1 \leq r_i \leq 1,000,000,000\)), указывающих, видео с номерами \(p_i\) и \(q_i\) имеют релевантность \(r_i\).

Следующие \(Q\) строк описывают \(Q\) вопросов ФД. Каждая строка содержит два целых числа \(k_i\) and \(v_i\) (\(1 \leq k_i \leq 1,000,000,000, 1 \leq v_i \leq N\)), указывающих, что \(i\)-ый вопрос ФД таков "сколько видео будет предложено, тому кто смотрит видео \(v_i\), если \(K = k_i\)."

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

Выведите \(Q\) строк. На строке \(i\) выведите ответ на \(i\)-ый запрос ФД.

Беси попала на дальнюю ферму. Эта ферма состоит из \(N\) амбаров (\(2 \leq N \leq 7 \cdot 10^4\)) и \(N-1\) двунаправленных туннелей между амбарами, так что между любыми двумя амбарами имеется путь, и он единственный. Каждый амбар, который имеет только один туннель, является выходом. Когда придёт утро, Беси приземлится на некоторый амбар и попытается достичь выхода.

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

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

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

Первая строка ввода содержит \(N\). Каждая из последующих \(N-1\) строк содержит два целых числа в интервале \(1 \ldots N\), описывающих туннель между двумя амбарами.

Заметим время на тест в этой задаче больше чем по умолчанию: 4 секунды для C/C++/Pascal, и 8 секунд для Java/Python.

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

Выведите \(N\) строк, где \(i\)-ая строка содержит минимальное количество фермеров, необходимых, чтобы поймать Беси, если она приземлится в амбаре \(i\).

MooTube#90016
Во время отдыха, Фермер Джон создал новый видео-сервис, который он назвал MooTube. На MooTube коровы ФД могут записывать видео, делится ими, и открывать новые интересные видео. Его коровы уже разместили \(N\) видео (\(1 \leq N \leq 100,000\)), последовательно пронумерованных \(1 \ldots N\).

ФД хочет создать список "предлагаемых видео" для каждого видео на MooTube, который будет рекомендовать видео, наиболее релевантные тем, которые коровы посмотрели.

ФД ввёл "метрику релевантности", которая определяет насколько релевантны два видео друг другу. Он выбрал \(N-1\) пар видео и вручную вычислил их релевантность. Затем ФД визуализировал свои видео в виде сети, где каждое видео-вершина, а рёбра проведены между парами вершин-видео, для которых он проводил анализ релевантности. Оказалось, что ФД выбрал пары так, что любое видео достижимо от любого другого по этим рёбрам, причём единственным способом. Теперь ФД определил релевантность любой пары видео как минимум из релевантностей рёбер на пути от одного видео к другому.

ФД теперь хочет выбрать такое значение величины \(K\), чтобы при просмотре видео предлагались к просмотру как релевантные как минимум ещё \(K\) видео. Однако он боится, что большое \(K\) снизит надои. Поэтому он просит Вас ответить на вопросы по поводу \(K\).

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

Первая строка ввода содержит \(N\) и \(Q\) \(Q\) (\(1 \leq Q \leq 100,000\)).

Каждая из следующих \(N-1\) строк описывает пару видео, сравненных вручную. Каждая строка включает три целых числа \(p_i\), \(q_i\), и \(r_i\) (\(1 \leq p_i, q_i \leq N, 1 \leq r_i \leq 1,000,000,000\)), указывающих, видео с номерами \(p_i\) и \(q_i\) имеют релевантность \(r_i\).

Следующие \(Q\) строк описывают \(Q\) вопросов ФД. Каждая строка содержит два целых числа \(k_i\) and \(v_i\) (\(1 \leq k_i \leq 1,000,000,000, 1 \leq v_i \leq N\)), указывающих, что \(i\)-ый вопрос ФД таков "сколько видео будет предложено, тому кто смотрит видео \(v_i\), если \(K = k_i\)."

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

Выведите \(Q\) строк. На строке \(i\) выведите ответ на \(i\)-ый запрос ФД.

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

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

Беси не уверена в своих шансах на успех, которые зависят от количества фермеров, которые будут за ней охотиться. Если Вам дан номер амбара \(K\), в котором приземлится Беси, определите минимальное количество фермеров, которое необходимо, чтобы поймать Беси, в предположении, что фермеры распределяться оптимально среди выходных амбаров.

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

Первая строка ввода содержит \(N\) и \(K\). Каждая из последующих \(N-1\) строк содержи два целых числа в интервале \(1 \ldots N\), описывающих туннель между двумя амбарами.

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

Выведите минимальное количество фермеров, необходимых, чтобы поймать Беси.

Беси хранит свои файлы на компьютере в виде коллекции директорий.

bessie/
  folder1/
    file1
    folder2/
      file2
  folder3/
    file3
  file4

Самая верхняя директория называется bessie

Беси может заходить в любую директорию, какую захочет. Из данной директории любой файл может быть доступен по "относительному пути". В относительном пути символ ".." означает родительскую директорию. Например, если Беси находится в директории folder2, то она может обращаться к своим четырём файлам следующим образом:

../file1
file2
../../folder3/file3
../../file4

Беси хочет выбрать такую директорию, из которой сумма длин относительных путей ко всем файлам минимальна.

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

Первая строка содержит целое число N (\(2 \leq N \leq 100,000\)), определяющее общее количество файлов и директорий. В целях упрощения ввода каждому объекту (файлу или директории) назначено уникальное целое число (ID) от 1 до \(N\), где 1 означает самую верхнюю директорию.

Далее следуют \(N\) строк. Каждая строка начинается с имени файла или директории. Имя состоит только из маленьких английских букв a-z и цифр 0-9 и имеет длину не более 16 символов. Следом за именем идёт целое число \(m\). Если \(m\) равно 0, значит это файл. Если \(m > 0\), значит это директория, которая содержит \(m\) файлов или директорий. Следующие \(m\) целых чисел содержат идентификаторы объектов в этой директории.

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

Выведите минимально возможную длину всех относительных путей к файлам. Заметим, что это число может таким большим, что не поместится в 32-битное целое.

Hoofball#90000
В порядке подготовки к предстоящему турниру Фермер Джон учит \(N\) своих коров (последовательно пронумерованных \(1\dots N\), где \(1 \leq N \leq 100\)) в передаче мяча. Все коровы стоят вдоль длинной прямой линии на одной стороне амбара корова \(i\) стоит на \(x_i\) единиц от амбара (\(1 \leq x_i \leq 1000\)). Все коровы находятся в различных позициях.

В начале тренировки ФД бросает несколько мячей различных коровам. Когда корова \(i\) получает мяч, от ФД или от другой коровы, она передаёт мяч ближайшей к ней корове. Если таких коров несколько, то она передаёт мяч самой левой из них. ФД хочет обеспечить, чтобы каждая корова хоть один раз получила мяч. Помогите ФД определить минимальное количество мячей, которое он должен бросить изначально, (правильному подмножеству коров), чтобы каждая корова хоть один раз получила мяч.

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

Первая строка ввода содержит \(N\). Вторая строка содержит \(N\) целых чисел, разделённых одиночными пробелами, где \(i\)-ое число - есть \(x_i\).

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

Выведите минимальное количество мячей, которые изначально ФД должен отпасовать коровам так, чтобы каждая корова получила мять хоть однажды.

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

Им было здорово вместе, но настало время расставаться, уезжая по одной. Они хотят уезжать в таком порядке, чтоб пока остаётся не меньше двух коров, каждая корова имела друга среди оставшихся коров. Более того, имеется \(M\) пар коров \((a_i, b_i)\) таких, что корова \(a_i\) должна уезжать до коровы \(b_i\). Заметим, что коровы \(a_i\) и \(b_i\) могут быть, а могут и не быть друзьями.

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

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

Строка \(1\)содержит два разделённых пробелом целых числа \(N\) и \(M\).

Каждая из строки \(2 \leq i \leq N\) содержит два целых числа \(x_i\) и \(y_i\) где \(1 \leq x_i, y_i \leq N\) и \(x_i \neq y_i\) указывающие, что коровы \(x_i\) и \(y_i\) - друзья.

Каждая из строк \(N+1 \leq i \leq N+M\) содержит два целых числа \(a_i\) и \(b_i\) где \(1 \leq a_i, b_i \leq N\) и \(a_i \neq b_i\) указывающие, что корова \(a_i\) должна уехать прежде, чем корова \(b_i\).

Гарантируется, что \(1 \leq N, M \leq 10^5\). В тестах на \(20\%\) баллов гарантируется, что \(N, M \leq 3000\).

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

Вывод должен содержать \(N\) строк, по одному целому числу \(d_i\) в каждой строке такие что \(d_i = 1\) если корова \(i\) может оказаться последней, и \(d_i = 0\) в противном случае.

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

ФД выбрал танец "Bovine Shuffle", в котором \(N\) коров (\(1 \leq N \leq 100,000\)) выстроены в ряд в некотором порядке, затем они выполняют успешную перестановку, которая потенциально может переупорядочить коров. ФД пометил позиции коров \(1 \ldots N\), так, что первая корова в ряду стоит на позиции 1, вторая - на позиции 2, и т.д., до позиции \(N\).

Перестановка описывается \(N\) числами, \(a_1 \ldots a_N\), означающими, что корова с позиции i переместится в позицию \(a_i\) (все \(a_i\) в интервале $1 \ldots N) Каждая корова во время перестановки идёт на свою новую позицию. К несчастью, все \(a_i\)' не обязательно различные, поэтому несколько коров могут во время перестановки придти в одну и ту же позицию. После чего они будут ходить вместе все оставшиеся перестановки.

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

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

Первая строка ввода содержит \(N\), количество коров. Следующая строка содержит \(N\) целых чисел \(a_1 \ldots a_N\).

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

Выведите количество позиций, в которых всегда остнутся коровы, вне зависимости от количества выполненных перестановок.

Беси и её друзья придумали новую игру "Затолкай ящик вокруг амбара в правый угол не сдвигая сено".

Амбар может быть представлен прямоугольной решёткой \(N \times M\). В некоторых ячейках решётки находится сено. Беси находится в одной ячейке этой решётки, а большой деревянный ящик занимает другую. Беси и этот ящик не помещаются в одной ячейке одновременно, также они не могут заходить в ячейку с сеном.

Бесси может двигаться в 4 ортогональных направлениях (север, юг, запад, восток). пока не уткнётся в ячейку с сеном. Если она попытается войти в ячейку с ящиком, то ящик продвинется на одну ячейку в этом же направлении, если там есть свободная ячейка. Если свободной ячейки нет, Беси не может сдвинуть ящик.

Определённая ячейка решётки указана как цель. Беси должна доставить ящик в это место.

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

Замечание: в этой задаче можно использовать 512 Мбт оперативной памяти, в отличие от лимита по умолчанию в 256 Мбт.

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

Первая строка ввода содержит три числа \(N\), \(M\), \(Q\), где \(N\) - количество строк, \(M\) - количество столбцов.

  • \(1 \le N,M \le 1500\).
  • \(1 \le Q \le 50,000\).

Следующие \(N\) строк описывают решётку, где символ '.' показывает пустую ячейку, '#' - ячейку с сеном, 'A' - стартовую позицию Беси, 'B' - начальное положение ящика.

Далее следуют \(Q\) строк, каждая из которых содержит пару чисел \((R, C)\). Для каждой пары Вы должны определить, возможно ли доставить ящик в эту ячейку, со строкой \(R\), столбцом \(C\), из начального состояния амбара. Верхняя строка имеет номер 1, левый столбец имеет номер 1.

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

\(Q\) строк, каждая содержит одну из строк "YES" или "NO".

У Фермера Ноя \(N\) коров (\(1 \leq N \leq 10^5\)), последовательно пронумерованных \(1 \dots N\). Они неожиданно оказались на ферме Джона и ФД хочет дать им подарки.

Коровы ФН выстроились перед ФД так, что корова \(1\) в голове очереди, а корова \(N\) - в её хвосте. ФД рассчитывал, что в каждый момент времени, корова из головы очереди получит подарок и станет в конец очереди. Однако неожиданно он обнаружил, что коровы ФН ведут себя не так. После получения подарка каждая корова может пойти не в конец очереди, а вставиться перед группой коров в конце очереди. А именно корова \(i\) всегда становится точно перед \(c_i\) коровами от конца (\(0 \leq c_i \leq N-1\)).

ФД знает, что некоторые коровы могут получить много подарков, но не это его беспокоит. Он боится, что некоторые коровы могут вовсе не получить подарков.

Помогите ФД определить количество коров, которые вообще никогда не получат подарок, сколько бы подарков не раздавалось.

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

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

Вторая строка содержит \(N\) разделённых одиночными пробелами целых чисел \(c_1, c_2, \dots, c_N\).

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

Выведите количество коров, которые не получат ни одного подарка.

У Беси и Эльзы по 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\).

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

Ферма состоит из \(N\) амбаров, соединённых \(M\) двунаправленными дорожками между некоторыми парами амбаров (\(1 \leq N, M \leq 3000\)). ФД закрывает один амбар за раз. После того как амбар закрыт, все дорожки, прилегающие к нему тоже становятся закрытыми и не могут больше использоваться.

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

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

Первая строка ввода содержит числа \(N\) и \(M\). Каждая из следующих \(M\) строк описывает дорожку , задавая пару амбаров, которые она соединяет (амбары пронумерованы последовательно \(1 \ldots N\)). Последние \(N\) строк задают перестановку \(1 \ldots N\) описывающую порядок, в котором будут закрываться амбары.

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

Вывод содержит \(N\) строк, каждая есть "YES" или "NO". Первая строка отвечает на попрос была ли ферма полностью связанной изначально, а далее строка \(i+1\) указывает, осталась ли ферма полностью связной после \(i\)-го закрывания.

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