графы

162 задачи
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Visits#90186
У Беси есть \(N\) (\(2\le N\le 10^5\)) приятелей - быков, последовательно пронумерованных \(1\ldots N\). Для каждого \(1\le i\le N\), бык \(i\) хочет посетить быка \(a_i\) (\(a_i\neq i\)).

Задана перестановка \((p_1,p_2,\ldots, p_N)\) из \(1\ldots N\), указывающая как произошли посещения.

Для каждого \(i\) от \(1\) до \(N\):

  • Если бык \(a_{p_i}\) уже ушёл со своей фермы, то бык \(p_i\) остаётся на своей ферме.
  • Иначе бык \(p_i\) уходит со своей фермы на ферму \(a_{p_i}\). Этот визит завершается радостным "moo" произнесённым \(v_{p_i}\) раз (\(0\le v_{p_i}\le 10^9\)).

Вычислите максимально возможное количество "moo" после всех визитов по всем возможным перестановкам \(p\).

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

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

Для каждого \(1\le i\le N\), \(i+1\)-ая строка содержит два разделённых пробелом целых числа \(a_i\) и \(v_i\).

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

Одно целое число - ответ.

Заметим, что при вычислениях может потребоваться использование 64-битного типа целых чисел (например, long long в C++).

Дан ориентированный граф с \(N\) вершинами и \(M\) дугами (\(2 \leq N \leq 10^5\), \(1 \leq M \leq 2 \cdot 10^5\)). Коровы играют в такую игру для двух игроков:

Две фишки размещаются на заданном графе. На каждом ходу первый игрок (brain) выбирает фишку, которая должна пройти по одной из выходящих дуг. Другой игрок (hoof) выбирает по какой дуге должна пойти эта фишка. Эти две фишки никогда не могут быть в одной и той же вершине. Если в какой-то момент hoof не может сделать ход, выиграл brain. Если игра продолжается бесконечно - выиграл hoof.

Вам даются \(Q\) запросов (\(1 \leq Q \leq 10^5\)), указывающие стартовые вершины обоих фишек. Для каждого запроса выведите, какой игрок выиграет.

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

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

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

Заданный граф не содержит петель и множественных дуг.

Следующая строка содержит \(Q\).

Каждая из последующих \(Q\) строк содержит два целых числа \(x\) и \(y\) (\(1\le x,y\le N\) and \(x\neq y\)), указывающих стартовые вершины фишек.

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

Строка длиной \(Q\) где каждый символ B означает, что выиграл brain, а символ H означает, что выиграл hoof.

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

Cereal 2#90171
Коровы Фермера Джона съедают на завтрах по ящику зерна!

На ферму поступили \(M\) различных типов зерна \((2\le M\le 10^5)\). К несчастью, есть только один ящик зерна каждого типа. Каждая из \(N\) коров \((1\le N\le 10^5)\) имеет первый и второй любимые типы зерна. Когда корове приходит время выбирать, она выполняет следующий процесс:

  1. Если ящик с её любимым типом еще есть, она берёт его и отходит
  2. Иначе если ящик с её вторым любимым типом зерна ещё есть, она берёт его и отходит
  3. Иначе она не берёт ничего

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

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

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

Для каждого \(1\le i\le N,\) \(i\)-ая строка содержит два разделённых пробелом целых числа \(f_i\) и \(s_i\) (\(1\le f_i,s_i\le M\) и \(f_i\neq s_i\)) которые обозначают номера типов первого и второго любимого зерна \(i\)-ой коровы.

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

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

У Фермера Джона имеется \(N\) производящих молоко ферм (\(1\le N\le 10^5\)), последовательно пронумерованных \(1\ldots N\). Изначально нет дорог, соединяющих эти фермы.

ФД намерен сделать серию из \(Q\) изменений (\(0\le Q\le 2\cdot 10^5\)) следующих видов

  • D x - деактивировать ферму \(x\), так что она перестанет производить молоко.
  • A x y - построить дорогу между двумя активными фермами \(x\) и \(y\).
  • R e - удалить \(e\)-ую дорогу, которая была добавлена. (\(e = 1\) - первая дорога, которая была добавлена).

Ферма \(x\) которая активно производит молоко или которая достижима от другой активной фирмы через серию дорог называется "релевантной" фермой. Для каждой фермы \(x\), вычислите максимум \(i\) (\(0\le i\le Q\)) таких, что \(x\) релевантна после \(i\)-го обновления.

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

Первая строка ввода содержит \(N\) и \(Q\). Каждая из последующих \(Q\) строк содержит обновление одного из видов

D x
A x y
R e

Гарантируется, для обновления типа R что \(e\) не более количества дорог, которые были добавлены и никакие две команды R не будут иметь одно и то же значение \(e\).

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

Выведите \(N\) строк, каждая из которых содержит одно целое число в интервале \(0\ldots Q\).

У Фермера Джона есть \(N\) подарков помеченных числами \(1\ldots N\) для его \(N\) коров, также помеченных числами \(1\ldots N\) (\(1\le N\le 500\)). Каждая корова имеет список предпочтений, который представляет собой перестановку из всех \(N\) подарков, так что корова предпочитает подарок, который появился в списке раньше подарку, который появился в списке позже.

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

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

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

Первая строка содержит \(N\). Следующие \(N\) строк содержат список предпочтения коровы. Гарантируется, что каждая строка формирует перестановку чисел \(1\dots N\).

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

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

Поскольку последняя работа Беси была встречена критикой, она сделала новую, выбрав на плоскости \(1\le N\le 10^5\) прямоугольников на плоскости со сторонами, что никакие две из них не коллинеарны. Границы этих прямоугольников определяют границы раскрашенных регионов.

Будучи художницей-аванагардисткой, она решила, что прямоугольники будут составлять коровы породы Holstein. Точнее, каждый регион, огороженный прямоугольником, раскрашивается в белый или черный цвет. Никакие два соседние региона не имеют один и тот же цвет. Регион снаружи всех прямоугольников, раскрашен в белый цвет.

Беси просит вывести Вас одну из двух вещей в зависимости от параметра \(T\):

  • Если \(T=1\), выведите общее количество регионов.
  • Если \(T=2\), выведите количество белых регионов, за которым идёт количество черных регионов.

**Замечание: время на тест для этой задачи увеличено до 4с (в два раза больше обычного времени на тест).**

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

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

Каждая из последующих \(N\) строк содержит описания прямоугольника в виде \((x_1,y_1), (x_2,y_2)\) где \(1\le x_1<x_2\le 2N\) и \(1\le y_1<y_2\le 2N\). \((x_1, y_1)\) и \((x_2, y_2)\) это левый нижний и правый верхний углы прямоугольника соответственно. Гарантируется, что все \(x_i\) формируют перестановку \(1\ldots 2N\). Аналогичное условие гарантируется и для всех \(y_i\).

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

Одно целое, если \(T=1\), иначе два целых числа, разделённых пробелом.

У Фермера Джона есть \(N\) подарков помеченных числами \(1\ldots N\) для его \(N\) коров, также помеченных числами \(1\ldots N\) (\(1\le N\le 18\)) Каждая корова имеет список предпочтений, который представляет собой перестановку из всех \(N\) подарков, так что корова предпочитает подарок, который появился в списке раньше подарку, который появился в списке позже.

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

Имеется также дополнительное ограничение: подарок может быть переназначен корове, если он изначально был назначен корове такого же типа (Holstein или Guernsey)). Задано \(Q\) (\(1\le Q\le \min(10^5,2^N)\))длин \(N\) строк пород для каждой из них вычислите количество переназначений, соответствующих ей.

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

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

Каждая из следующих \(N\) строк содержит список предпочтений одной коровы. Гарантируется, что каждая строка является перестановкой \(1\dots N\).

Следующая строка содержит \(Q\).

Каждая из последующих \(Q\) строк содержит строку пород, каждая имеет \(N\) символов длину и состоит только из символов G и H. Никакая из строк пород не появится более одного раза.

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

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

Barn Tree#90147
Обратите внимание: время на тест для этой программы 4 сек, в два раза больше чем обычно. Ограничение по памяти также в два раза выше чем обычно.**

На ферме Джона имеется \(N\) амбаров (\(2 \leq N \leq 2\cdot 10^5\)) пронумерованных \(1 \dots N\). Имеется \(N-1\) дорог, где каждая дорога соединяет два амбара и от любого амбара до любого другого можно добраться посредством некоторой последовательности дорог. В \(j\)-ом амбаре имеется \(h_j\) снопов сена (\(1\le h_j\le 10^9\)).

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

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

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

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

Вторая строка ввода содержит разделённые одиночным пробелами значения \(h_j\) для \(j = 1 \dots N\).

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

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

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

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

Если имеется множество решений, выводите любое.

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

Изначально имеется \(M\) (\(1\le M\le 2\cdot 10^5\)) пар друзей среди \(N\) (\(2\le N\le 2\cdot 10^5\)) коров Фермера Джона. Коровы пронумерованы \(1\dots N\). Коровы покидают ферму на каникулы одна за другой. В день \(i\), \(i\)-ая корова покидает ферму и все друзья этой коровы которые ещё остались на ферме образовывают новые пары друзей. Сколько новых пар будет образовано всего?

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

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

Следующие \(M\) строк содержат два целх числа \(u_i\) и \(v_i\), обозначающие, что коровы \(u_i\) и \(v_i\) - друзья (\(1\le u_i,v_i\le N\), \(u_i\neq v_i\)). Никакая пара коров не появится более одного раза.

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

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

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\).

У фермера Джона есть \(N\) коров (\(2\le N\le 10^5\)), последовательно пронумерованных \(1 \ldots N\). Среди этих коров имеется \(M\) (\(1\le M\le 2\cdot 10^5\)) пар друзей.

Группа коров называется "дружественной группой", если каждая корова в группе достижима от каждой другой коровы группы через цепочку "дружб", которые лежат в группе. (дружбы, связывающие коров вне группы не влияют). "Сила" группы - минимальное количество друзей любой коровы в группе умножить на количество коров в группе. Опять-таки связи вовне группы не влияют на ответ.

Определите максимальную силу по всем "дружественным группам".

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

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

Следующие \(M\) строк содержат два целых числа \(u_i\) и \(v_i\), обозначающих, что коровы \(u_i\) и \(v_i\) друзья (\(1\le u_i,v_i\le N\), \(u_i\neq v_i\)). Никакая пара дружбы не появится более одного раза.

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

Одна строка, содержащая максимальную силу по всем "дружественным группам".

У Беси есть коллекция связных неориентированных графов \(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\).

Беси недавно получила набор красок. Холст может быть представлен как \(N \times M\) прямоугольник из ячеек, где строки пронумерованы \(1\ldots N\) сверху вниз, а столбцы пронумерованы \(1\ldots M\) слева направо (\(1\le N,M\le 1000\)). Покрашенная ячейка представляется большой буквой от 'A' до 'Z'. Изначально все ячейки не раскрашены, и ячейка не может краситься более одного раза.

У беси есть желаемый цвет для каждой ячейки. Она может красить множество ячеек одним касанием, если это множество образуем связную компоненту, то есть что любая её ячейка достижима из любой другой через последовательность соседних ячеек. Две ячейки называются соседними, если они имеют общую сторону.

Например, рассмотрим холст \(3\times 3\)

AAB
BBA
BBB

Он может быть раскрашен за 4 касания так:

...    ..B    AAB    AAB    AAB
... -> ... -> ... -> BB. -> BBA
...    ...    ...    BBB    BBB

Невозможно его раскрасить менее чем за 4 касания.

Будучи авангардисткой, Беси намерена покрасить только подрегион холста. Сейчас она рассматривает \(Q\) кандидатов (\(1\le Q\le 1000\)), каждый из которых представляется четырьмя целыми числами \(x_1\), \(y_1\), \(x_2\), \(y_2.\) Это означает, подпрямоугольник состоит из всех ячеек со строками в диапазоне от \(x_1\) до \(x_2\) включительно, и колонками в диапазоне от \(y_1\) до \(y_2\) включительно.

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

Замечание: Время на тест в этой задач ена 50% выше чем по умолчанию, а ограничения оп памяти 512 Мбт - в два раза больше чем по умолчанию.

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

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

Каждая из последующих \(N\) строк содержит строку из \(M\) больших букв, представляющих желаемый цвет каждой строки холста.

Каждая из следующих \(Q\) строк содержит четыре разделённых одиночными пробелами целых числа \(x_1,y_1,x_2,y_2\), представляющих подпрямоугольник (\(1\le x_1\le x_2\le N\), \(1\le y_1\le y_2\le M\)).

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

Для каждого из \(Q\) запросов выведите ответ в отдельной строке.

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 10^5\)) стоят в ряд, корова \(i\) стоит на позиции \(i\). Последовательность перемещений в танце задаётся \(K\) (\(1\le K\le 2\cdot 10^5\)) парами позиций \((a_1,b_1), (a_2,b_2), \ldots, (a_{K},b_{K})\). В каждую минуту \(i = 1 \ldots K\) танца, коровы в позициях \(a_i\) и \(b_i\) меняются позициями. Аналогичные \(K\) обменов произойдут в минуты \(K+1 \ldots 2K\), затем в минуты \(2K+1 \ldots 3K\), и т.д. до истечения \(M\) минут (\(1\le M\le 10^{18}\)) Другими словами

  • В минуту \(1\), коровы в позициях \(a_1\) и \(b_1\) меняются позициями.
  • В минуту \(2\), коровы в позициях \(a_2\) и \(b_2\) меняются позициями.
  • ...
  • В минуту \(K\), коровы в позициях \(a_{K}\) и \(b_{K}\) меняются позициями.
  • В минуту \(K+1\), коровы в позициях \(a_{1}\) и \(b_{1}\) меняются позициями.
  • В минуту \(K+2\), коровы в позициях \(a_{2}\) и \(b_{2}\) меняются позициями.
  • и т.д. ...

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

Замечание: время на тест удвоено.

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

Первая строка содержит целые числа \(N\), \(K\), \(M\). Каждая из последующих \(K\) строк содержит \((a_1,b_1) \ldots (a_K, b_K)\) (\(1\le a_i<b_i\le N\)).

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

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

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

На этой ферме имеется два амбара - один в поле \(1\), другой в поле \(N\). ФД хочет быть уверен, что имеется путь между двумя амбарами последовательностью дорожек. Оно готов построить до двух новых дорожек, чтобы добиться своей цели. Стоимость построения дорожки между полями \(i\) и \(j\) есть \((i-j)^2\).

Помогите ФД определить минимальную стоимость сделать так, чтобы амбары \(1\) и \(N\) стали достижимы друг для друга.

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

Каждый входной тест содержит \(T\) под тестов (\(1\le T\le 20\)), все из которых должны быть решены правильно, чтобы пройти этот тест.

Первая строка ввода содержит \(T\), за которым следуют \(T\) подтестов.

Каждый подтест начинается с двух целых чисел \(N\) и \(M\). Каждая из последующих \(M\) строк содержит два целых числа \(i\) и \(j\), означающих путь между двумя различными полями \(i\) и \(j\). Гарантируется, что имеется не более одного пути между любыми двумя полями. и что сумма \(N+M\) для всех подтестов не более \(5 \cdot 10^5\).

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

Выведите \(T\) строк. \(i\)-ая строка должна содержать одно целое число, минимальную стоимость для \(i\)-го подтеста.

Tickets#90128
Беси собирается на экскурсию. Маршрут состоит из \(N\) пунктов пронумерованных \(1\ldots N\) (\(1\le N\le 10^5\)).

Имеется \(K\) (\(1\le K\le 10^5\)) билетов доступных для продажи. \(i\)-ый билет можно купить в пункте \(c_i\) (\(1\le c_i\le N\)) за цену \(p_i\) (\(1\le p_i\le 10^9\)) и обеспечить себе доступ ко всем пунктам \([a_i,b_i]\) (\(1\le a_i\le b_i\le N\)). Прежде чем войти в любой пункт, Беси должна купить билет который обеспечивает доступ в этот пункт. Купив однажды билет в пункт, Беси может возвращаться в него в любой момент в будущем.

Для каждого \(i\in [1,N]\), выведите минимальную суммарную цену которую требуется заплатить, чтобы получить доступ к обоим пунктам \(1\) и \(N\), если изначально Беси имела доступ только к пункту \(i\). Если это невозможно, выведите \(-1\).

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

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

Каждая из последующих \(K\) строк содержит четыре целых числа \(c_i\), \(p_i\), \(a_i\), \(b_i\) для каждого \(1\le i\le K\).

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

\(N\) строк, по одной для каждого пункта.

HILO#90124
Беси знает число \(x+0.5\), где \(x\) - некоторое целое число между \(0\) и \(N\), включительно (\(1\le N\le 2 \cdot 10^5\)).

Эльза пытается угадать это число. Она может задавать вопросы вида "число \(i\) больше или меньше?" для некоторого \(i\) между \(1\) и \(N\), включительно. Беси отвечает "HI", если число \(i\) больше чем \(x+0.5\), или "LO" если число \(i\) меньше чем \(x+0.5\).

При угадывании числа Эльза следует следующей стратегии. Сначала она создаёт список из \(N\) чисел, где каждое число от \(1\) до \(N\) встречается ровно один раз (другими словами, этот список есть перестановка размера \(N\)). Затем она идёт по этому списку спрашивая число по порядку из этого списка.

Однако Эльза пропускает бесполезные вопросы, например, если Эльза сейчас должна спросить про число \(i\), а ранее она спрашивала про число \(j < i\) и Беси отвечала "HI", тогда Эльза не спрашивает про \(i\) и переходит к следующему числу в перестановке. Аналогично, если она раньше спрашивала про \(j > i\) и получала ответ "LO", Эльза не спрашивает про \(i\) и переходит к следующему числу в списке. Можно доказать, что следую такой стратегии, Эльза всегда однозначно определит \(x\) вне зависимости от перестановки, которую создаст.

Если мы конкатенируем все ответы Беси вида "HI" или "Lo" в одну строку \(S\), тогда количество раз, когда Беси сказала "HILO" есть количество подстрок длины \(4\) в строке \(S\), которые равны "HILO".

Беси знает стратегию Эльзы; более того, она также занет точную перестановку, которую Эльза будет использовать. Однако Беси ещё не решила какое использовать число \(x\).

Помогите Беси определить сколько раз она скажет "HILO" для каждого значения \(x\).

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

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

Вторая строка содержит перестановку Эльзы размера \(N\).

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

Для каждого \(x\) в интервале от \(0\) до \(N\), включительно, на отдельной строке выведите количество раз которое Беси скажет "HILO"

Беси сделала \(N\) браслетов, последовательно пронумерованных \(1 \ldots N\). (\(1\le N\le 50\)). \(i\)-ый браслет раскрашен цветом \(i\) из множества из \(N\) различных цветов. Беси разложила их на столе (который мы можем рассматривать как двумерную плоскость) в соответствии со следующими ограничениями:

  1. Каждый браслет - одна замкнутая многоугольная цепочка -- серия вершин (точек), соединённых последовательно отрезками прямых, где первая и последняя точки свопадают (детальнее см. многоугольная цепочка),
  2. Браслет не самопересекается (это соответсвует "простой") многоугольной цепочке.
  3. Никакие два браслета не пересекаются.

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

К счастью, у Беси есть фонарик. Она выбрала \(M\) (\(1\le M\le 50\)) вертикальных прямых \(x=1, x=2, \ldots, x=M\) и для каждой вертикальной прямой она направила луч вдоль неё от \(y=-\infty\) до \(y=\infty\), записывая цвета всех браслетов, которые она увидела в порядке их появления. По счастью, лучи фонарика не пересекли ни одну вершину ни одной многоугольной цепочки. Более того, для каждого луча каждый цвет появился ровно дважды.

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

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

Каждый входной тест состоит из \(T\) подтестов (\(1 \leq T \leq 50\)), каждый из которых нужно решить правильно, чтобы получить полный балл за тест. Тесты разделены пустыми строками.

Первая строка ввода содержит \(T\). Далее следуют \(T\) подтестов.

Первая строка каждого подтеста содержит два целых числа \(N\) \(M\). Далее каждый подтест содержит \(M\) дополнительных строк. Для каждого \(i\) от \(1\) до \(M\), \(i\)-ая дополнительная строка содержит целое число \(k_i\) (\(0\le k_i\le 2N\), \(k_i чётное\), за которымм следуют \(k_i\) целых чисел \(c_{i1}, c_{i2},\ldots, c_{ik_i}\) (\(c_{ij}\in [1,N]\), каждое \(c_{ij}\) появится 0 или 2 раза). Это значит что когда Беси светит фонариком от \((i,-\infty)\) до \((i,\infty)\), она увидит цвета \(c_{i1}, c_{i2},\ldots, c_{ik_i}\) в этом порядке.

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

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

Circus#90117
\(N\) коров из цирка Фермера Джона (\(1 \leq N \leq 10^5\)) готовят своё представление. Оно будет происходить на дереве с вершинами помеченными \(1\ldots N\). "Стартовое состояние" представления определяется числом \(1 \leq K \leq N\) и назначением коров \(1\dots K\) вершинам на дереве так, что никакие две коровы не размещаются в одной и той же вершине.

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

Для каждого \(1 \leq K \leq N\), помогите коровам определить количество классов эквивалентности стартовых состояний: то есть максимальное количество стартовых состояний, которое они могут выбрать, так что никакие два из них не будут эквивалентными. Поскольку эти числа могут быть очень большими, выведите их остатки по модулю \(10^9 + 7\).

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

Строка \(1\) содержит \(N\).

каждая из строк \(2\le i\le N\) содержит да целых числа \(a_i\) и \(b_i\) обозначающих ребро в дереве между вершинами \(a_i\) и \(b_i\).

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

Для кажого \(1\le i\le N,\) \(i\)-ая строка вывода должна содержать ответ для \(K=i\) по модулю \(10^9+7\).

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