поиск в глубину и подобное

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

ФД начинает в позиции \((0,0)\) и делает \(N\) шагов, двигаясь каждый раз на Единицу расстояния на север, юг, восток или запад. Каждый раз, когда он делает шаг, он строит изгородь за собой. Например, если первый его шаг будет на север, он добавит сегмент изгороди от \((0,0)\) до \((0,1)\). ФД может посещать точки повторно много раз и даже может строить одни и те же отрезки изгороди много раз. Его изгородь может даже пересекать себя много раз.

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

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

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

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 1000\)). Следующая строка содержит строку длины \(N\), описывающую путь ФД. Каждый символ один из N(север), E (восток), S (юг), W (запад).

ФОРМАТ ВЫВОДА (ФАЙЛ gates.out):

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

Беси собирается в путешествие по Cowland, которая имеет \(N\) (\(2\le N\le 2\cdot 10^5\)) городов, пронумерованных от \(1\) до \(N\) и \(M\) (\(1\le M\le 4\cdot 10^5\)) односторонних дорог. \(i\)-ая дорога ведёт из города \(a_i\) в город \(b_i\) и имеет метку \(l_i\) (\(1\le a_i,b_i\le N\), \(1\le l_i\le 10^9\)).

Путешествие длины \(k\) начинается в городе \(x_0\) - это последовательность городов \(x_0, x_1, \ldots, x_k\), таких, что что существует дорога из города \(x_i\) в город \(x_{i+1}\) для всех \(0\le i < k\). Гарантируется, что не существует путешествий бесконечной длины, и что никакие две дороги не соединяют одну и ту же пару городов.

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

Выведите длину и сумму меток дорог, предпочитаемого Беси путешествия, начинающегося из каждого города.

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

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

Каждая из следующих \(M\) строк содержит три целых числа \(a_i\), \(b_i\), \(l_i\), обозначающих дорогу из \(a_i\) в \(b_i\) с меткой \(l_i\).

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

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

Ферма состоит из \(N\) полей (\(1 \leq N \leq 2 \cdot 10^5\)), последовательно пронумерованных \(1 \ldots N\), и удобно соединённых множеством из \(M\) двунаправленных тропинок (\(1 \leq M \leq 2 \cdot 10^5\)). Будучи "существами привычки" коровы используют одно множество из \(N-1\) тропинок для всех своих ежедневных перемещений между полями. Они называют эти тропинки "стандартными" тропинками. Возможно добраться от любого поля до любого другого поля, используя только стандартные тропинки.

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

Помогите Беси посчитать количество хороших маршрутов, которые она может использовать.

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

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

ФОРМАТ ВЫВОДА (файл exercise.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".

Googol#89956
Коровы вознамерились разработать собственной поисковик. К несчастью, они не имели опыта разработки больших программных продуктов и потому количество сотрудников их проекта \(N\) (\(1 \le N \le 10^{100}\)) стало существенно больше, чем изначально планировалось. Для того, чтобы найти подходящее имя для своей компании, они решили оттолкнуться от верхней границы количества сотрудников своей компании и назвались "Googol", что является названием числа \(10^{100}\).

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

Каждый сотрудник имеет уникальной ID - число в диапазоне \(1\ldots N\), с корнем дерева - сотрудником номер 1. Вы можете интерактивно запрашивать у сотрудника ID двух его подчинённых. Это делается выводом ID этого сотрудника в стандартный вывод, за которым следует перевод строки. В ответ Вы получите одну строку, которая содержит два целых числа - ID левого и правого подчинённых данного сотрудника. Оба этих числа могут быть равны 0, если у него нет ни одного подчинённого. Или только второе число может быть 0, если у него нет правого подчинённого. (Заметим, в что в соответствии с правилом балансирования, левое поддерево всегда больше или равно правом, и потому не возможна ситуация, когда у сотрудника есть правый подчинённый, но нет левого подчинённого).

К несчастью, коровы потеряли точное значение \(N\) Пожалуйста, вычислите это число и выведите "Answer N", а за ним перевод строки как последнюю строку вашего вывода. Ваша программа имеет право сделать не более 70,000 запросов и не может выполняться боле 4 секунд (8 для Java и Python).

Далее приведен пример возможного взаимодействия между Вашей программой и грейдером (оценивающей программой).

YOUR PROGRAM: 1
GRADER: 4 3
YOUR PROGRAM: 4
GRADER: 2 0
YOUR PROGRAM: 3
GRADER: 0 0
YOUR PROGRAM: Answer 4

Дерево, соответствующее этому взаимодействию

     1
   4   3
 2

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


У Фермера Джона имеется N (1 <= N <= 50,000) пастбищ, последовательно пронумерованных от 1 до N, соединённых M (1 <= M <= 100,000) двунаправленными дорогами. Дорога I соединяет пастбища Ai (1 <= Ai <= N) и Bi (1 <= Bi <= N), Ai != Bi. Возможны две дороги соединяющие одну и ту же пару пастбищ.
Беси хочет украсить пастбища к дню рождения ФД. Она хочет разместить на каждом пастбище огромный знак содержащий либо букву ‘F’ либо букву ‘J’, но чтобы не огорчать ФД, должно быть выполнено правило, Пастбища декорируются разными знаками, если они соединены дорогой.
Компания, изготавливающая знаки, требует больше денег за знак ‘F’ и меньше денег за знак ‘J’, поэтому Беси хочет максимизировать количество знаков ‘J’, которые она использует. Пожалуйста, определите это число или выведите -1, если невозможно расставить знаки по описанным правилам.
uses. Please determine this number, or output -1 if there is no valid way to arrange the signs.
PROBLEM NAME: decorate
Формат ввода:
* Строка 1: Два целых числа N и M.
* Строки 2..M+1: Два целых числа, Ai и Bi указывающих наличие двунаправленной дороги между пастбищами Ai и Bi.
Примечание
Пастбища и дороги представляют собой вершины и стороны квадрата.
Формат вывода:
* Строка 1: Одно целое число, указывающее максимальное количество знаков ‘J’ которые сможет использовать Беси. Если нет решения, то выводить -1.
Примечание
Беси может пометить пастбища 1 и 3 знаком ‘J’ (или альтернативно - пастбища 2 и 4).
Problem 1: Mirror Field [Mark Gordon]
Фермер Джон оставил несколько старых зеркал во дворе и коровы их украли. Коровы установили эти зеркала на прямоугольном поле из N*M квадратов (1<=N,M<=1000) . В каждом квадрате они разместили двустороннее зеркало между двумя противоположными углами. Такие две возможные конфигурации представлены символами ‘/’ (зеркало, соединяющее левый нижний угол с правым верхним углом) и символом ‘\’ (зеркало, соединяющее левый верхний угол с правым нижним углом).
Однажды Беси пришла с лазером к этому полю. Она пускает луч света горизонтально или вертикально или в строку или в столбец поля, который отражается от некоторого количества зеркал. Поскольку все зеркала ориентированы диагонально, то горизонтальный луч света, отразившись от зеркала, продолжает движение вертикально, и наоборот.
Беси интересно каково максимальное количество зеркал, от которых может отразится её лазерный луч отправленный из одной позиции. Помогите ей вычислить это число.
PROBLEM NAME: mirror
Формат входных данных
* Строка 1: Целые числа N и M, разделённые одним пробелом.
* Строки 2..1+N: Каждая содержит M символов '/' или '\', описывающих одну строку зеркального поля.
Формат выходных данных
* Строка 1: Одно целое число, указывающее максимальное количество раз, которое может отразится луч выпущенный вертикально или горизонтально снаружи поля. Выведите -1, если он может отражаться бесконечно.
Примечание
Беси может запустить лазер сверху вниз в средней колонке и этот луч отразится 3 раза.
Mirrors#89880

Фермер Джон установил N отражающих заборов (зеркал) (1 <= N <= 200) в различных местах фермы и надеется что сможет видеть из своего дома в точке (0,0) до амбара в точке (a,b).
На 2D-карте фермы Джона забор i показывается коротким отрезком с центром в точке с целочисленными координатами (xi, yi) и повернутым на 45 градусов (либо так '/', либо так '/'). Например, забор типа '/' в позиции (3,5) может быть описан как отрезок из (2.9,4.9) в (3.1,5.1). Все центры заборов, а также амбар лежат в точках с целочисленными координатами в диапазоне от -1,000,000...1,000,000. Центр ни одного забора не лежит в точках (0,0) или (a,b).
ФД планирует сидеть в своем доме в позиции (0,0) и смотреть вправо (вдоль по оси X в положительном направлении). Он хочет видеть точку (a,b). Однако одно зеркало установлено неправильно (например, '\' вместо '/'). Пожалуйста, выведите индекс первого зеркала в списке ФД, повернув которое (с '/' на '\' или наоборот) ФД сможет увидеть точку (a,b).
Если ФД уже может видеть точку (a,b) не поворачивая ни одно зеркало, выведите 0. Если невозможно увидеть (a,b) после переключения ровно одного зеркала, выведите -1.
PROBLEM NAME: mirrors
Формат входных данных
* Строка 1: Три разделенных пробелом целых числа, N, a, b.
* Строки 2..1+N: Строка i+1 описывает зеркало i и содержит либо xi yi / либо xi yi \ Символ / или \ указывает ориентацию зеркала.
Формат выходных данных
* Строка 1: Индекс первого зеркала, переключение которого позволит ФД видеть точку (a,b). Если ФД уже может видеть точку (a,b) выведите 0, если переключение только одного зеркала не позволит видеть точку (a,b), выведите -1.
Примечание
Переключение зеркала в позиции (3,2) позволит ФД увидеть точку (a,b).
3 .\..... 2 //./--B 1 ...|... 0 H--/... 0123456

Коровы любят головоломки. Фермер Джон подарил Беси на день рождения новую головоломку. Она состоит из трех твердых объектов, каждый из которых состоит из склеенных вместе квадратиков размера 1 х 1. Каждый из этих объектов имеет «связную» форму в том смысле, что Вы можете перейти из одного квадратика в любой другой, двигаясь по квадратикам этого объекта в одном из четырех направлений: север, юг, запад, восток.
Объект может перемещаться последовательно скольжением на одну единицу в одном из четырех направлений: север, юг, запад, восток. Цель головоломки - переместить объекты так, чтобы они разделились – то есть, чтобы граничные квадратики отошли друг от друга. Ваша задача – по заданным трем объектам определить, можно их разделить, или нет. Конфигурация, которую разделить нельзя, называется заблокированной.

Замечание: программы, которые не делают ничего, кроме угадывания ответа, могут быть дисквалифицированы.
PROBLEM NAME: unlock
Формат входных данных
* Строка 1: Три разделенных одиночными пробелами целых числа: N1, N2, and N3, описывающих количество квадратов соответственно в фигурах 1, 2, и 3.
* Строки 2..1+N1: Каждая из этих строк описывает (x,y) координату юго-западного угла одного квадрата объекта 1. Все координаты в интервале 0..9.
* Строки 2+N1..1+N1+N2: Каждая из этих строк описывает (x,y) координату юго-западного угла одного квадрата объекта 2. Все координаты в интервале 0..9.
* Lines 2+N1+N2..1+N1+N2+N3: Каждая из этих строк описывает (x,y) координату юго-западного угла одного квадрата объекта 1. Все координаты в интервале 0..9.
Формат выходных данных
* Строка 1: Выведите 1, если объекты могут быть отделены друг от друга, и 0 в противном случае.
Problem 4: Cow Beauty Pageant (Bronze Level) [Brian Dean]
Прослышав о том, что последний писк моды – иметь коров с двумя пятнами, Фермер Джон купил себе целое стадо таких коров. Однако мода переменчива, и теперь модно иметь коров, у каждой из которых ровно одно пятно.
ФД решил сделать стадо более модным, подкрасив каждую из коров таким образом, чтобы ее два пятна слились в одно.
Корова представлена решеткой символов N*M (1 <= N,M <= 50), например, так:
................ ..XXXX....XXX... ...XXXX....XX... .XXXX......XXX.. ........XXXXX... .........XXX....
Здесь каждый символ 'X' обозначает часть пятна. Два символа 'X' принадлежат одному и тому же пятну, если они вертикально или горизонтально соседние (диагонально соседние таковыми не считаются). Таким образом, на рисунке выше представлены два пятна. Вообще все коровы ФД имеют ровно два пятна.
ФД хочет использовать как можно меньше краски, чтобы объединить два пятна в одно. В примере выше, он может сделать это, закрасив только три дополнительных клеточки (они помечены символами ‘*’ на рисунке ниже).
................ ..XXXX....XXX... ...XXXX*...XX... .XXXX..**..XXX.. ........XXXXX... .........XXX....
Помогите ФД определить минимальное количество клеток, которые нужно закрасить, чтобы объединить два пятна в одно большее.
PROBLEM NAME: pageant
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N и M.
* Строки 2..1+N: Каждая строка содержит строку из M символов 'X' и '.', указывающих одну строку коровьей окраски.
Формат выходных данных
* Строка 1: Минимальное количество новых символов 'X', которые необходимо добавить, чтобы получилось одно пятно.
Примечание
Три дополнительных символа ‘X’ превращают два пятна в одно.
................ ..1111....222... ...1111X...22... .1111..XX..222.. ........22222... .........222....

Со стародавних времён в поморских деревнях рукодельницы вышивали жемчугом на прямоугольных полотенцах, состоящих из одинаковых клеток. Вышивка начиналась с пришивания жемчужины к полотенцу в центре одной из клеток. Чтобы пришить новую жемчужину, рукодельница делала стежок из клетки, уже содержащей жемчужину, в соседнюю с ней по горизонтали или вертикали свободную клетку. Новая жемчужина пришивалась в центре клетки на конце стежка. Этот процесс повторялся, пока не заканчивались жемчужины.

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

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

Входные данные
Первая строка входных данных содержит два целых числа \(a\) и \(b\) — размеры полотенца в клетках по горизонтали и вертикали.

Вторая строка содержит два числа \(n\) и \(q\) — количество жемчужин в узоре и количество фрагментов соответственно.

Следующие \((n - 1)\) строк содержат описания стежков. Каждый стежок имеет один из следующих видов:

  • h \(x~y\) означает, что клетки с координатами \((x, y)\) и \((x + 1, y)\) содержат жемчужины, соединённые горизонтальным стежком (\(1 \leq x \leq a - 1\); \(1 \leq y \leq b\));
  • v \(x~y\) означает, что клетки с координатами \((x, y)\) и \((x, y + 1)\) содержат жемчужины, соединённые вертикальным стежком (\(1 \leq x \leq a\); \(1 \leq y \leq b - 1\)).

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

Следующие \(q\) строк описывают фрагменты. Каждое описание содержит четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\) — координаты левой нижней и правой верхней клетки фрагмента (\(1 \leq x_1 \leq x_2 \leq a\); \(1 \leq y_1 \leq y_2 \leq b\)).

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

Замечание
Пояснение к тесту из условия.

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

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

Разрешается в некоторых квадратах построить водостоки. Когда на каком-то квадрате строят водосток, то вся вода, которая раньше скапливалась в этом квадрате, будет утекать в водосток.

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

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

Входные данные
В первой строке записаны числа N и M, задающие размеры карты — натуральные числа, не превышающие 100. Далее идет N строк, по M чисел в каждой, задающих высоту квадратов карты над уровнем моря. Высота задается натуральным числом, не превышающим 10000. Считается, что квадраты, расположенные за пределами карты, имеют высоту 10001 (то есть вода никогда не утекает за пределы карты).

Выходные данные
Выведите минимальное количество водостоков, которое необходимо построить.
Напишите программу, выполняющую функции очень простой электронной таблицы. Она работает с таблицей из 9 строк от 1 до 9 и 26 столбцов от A до Z. Клетки таблицы обозначаются именами, составленными из кодов столбца и строки, например, B1, S8.

Каждая клетка содержит выражение. Выражения используют целые константы, ссылки на клетки, скобки, бинарные операторы +, -, * и / (целочисленное деление). Например, 567, E8/2, (3+B3)*(C4-1) являются правильными выражениями. Все операторы целочисленные. Деление на ноль даёт в результате ноль.

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

Ограничения: длина выражения в одной ячейке до 255 символов, все аргументы и результаты меньше 1 000 000.

Входные данные
Первая строка содержит число выражений N. Следующие N строк имеют формат <Имя клетки>=<выражение>. Все выражения корректные, и каждая ячейка определена не более чем одним выражением.

Выходные данные
В единственной строке выводится или значение клетки A1, или число 1000000 (один миллион), если значение клетки A1 не может быть найдено из-за циклической ссылки.

Робинзон живет на острове, который представляет собой прямоугольник размером \(n \times m\) клеток.

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

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

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

Робинзон не кидает очередной орех, пока предыдущий крокодил не окажется в воде.

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

Формат входных данных
В первой строке записаны числа \(n\) и \(m\) "— размеры острова с севера на юг и с запада на восток. Последующие \(n\) строк по \(m\) символов в каждой описывают текущее расположение крокодилов на острове. Если клетка свободна, то она обозначается точкой <<.>>, а если там находится крокодил, то в ней указано направление, в котором побежит этот крокодил. Направления обозначаются буквами: <<N>> "— север, <<S>> "— юг, <<E>> "— восток, <<W>> "— запад.

Формат входных данных
Выходной файл должен содержать одно число "— максимальное количество крокодилов, которых можно прогнать, не разозлив.


Пояснение к третьему примеру

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

Для того, чтобы мероприятие прошло интересно, необходимо выбрать хороших спикеров. Есть \(n\) кандидатов, \(i\)-й из которых характеризуется своей осведомленностью о проектах — целым числом \(a_i\) от \(0\) до \(2^k - 1\). При этом некоторые из кандидатов дружат между собой, а именно, есть \(m\) пар друзей \((f_i, s_i)\).

Разумеется, всем хочется, чтобы мероприятие прошло гладко, а для этого необходимо, чтобы все спикеры попарно дружили между собой. При этом, чтобы рассказы спикеров не казались однообразными, важно, чтобы количество выбранных спикеров было как можно больше. Осведомленностью группы размера \(s\), состоящей из кандидатов \(i_1, i_2, \ldots, i_s\), называется \(a_{i_1} \oplus a_{i_2} \oplus \ldots a_{i_s}\), где \(\oplus\) — операция побитового исключающего <<ИЛИ>>. Соответственно, помимо уже описанных критериев, среди всех подходящих групп кандидатов максимального размера необходимо выбрать группу спикеров с максимальной осведомленностью.

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

Так как список кандидатов еще не утвержден окончательно и может меняться, вам надо решить эту задачу для \(t\) возможных наборов кандидатов.

Формат входных данных
В первой строке ввода находится одно целое число \(t\) — количество случаев, для которых надо решить задачу (\(1 \le t \le 120\)). Далее следует описание \(t\) наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) — количество кандидатов, количество пар друзей среди кандидатов и количество различных тем, которые будут обсуждаться на конференции, соответственно (\(1 \le n \le 40\); \(0 \le m \le \frac{n \cdot (n - 1)}{2}\); \(0 \le k \le 30\)).

Во второй строке каждого набора через пробел перечислены \(n\) целых чисел \(a_i\) — уровни осведомленности о проектах каждого из кандидатов (\(0 \le a_i \le 2^k - 1\)).

Далее следуют \(m\) строк, \(i\)-я из которых содержит два целых числа \(f_i\) и \(s_i\) — номера кандидатов, образующих \(i\)-ю пару друзей (\(1 \le f_i, s_i \le n\); \(f_i \neq s_i\)). Гарантируется, что все перечисленные пары друзей различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(120\).

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

Замечание

В примере из условия:

  1. в первом наборе входных данных выгодно выбрать спикеров под номерами \(3\) и \(4\) с осведомленностью \(a_3 \oplus a_4 = 3 \oplus 4 = 7\);

  2. во втором наборе входных данных выгодно выбрать спикеров под номерами \(1\), \(3\) и \(4\) с осведомленностью \(1 \oplus 4 \oplus 8 = 14\);

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

Генеалогическое древо — это графическая схема, описывающая родственные связи в пределах одной семьи. Начало такого дерева — это один предок (родоначальник) или супруги и далее цепочка строится вниз. По заданному генеалогическому древу, определите у каждого элемента число его потомков (не считая самого элемента). 


Входные данные
Программа получает на вход число элементов в генеалогическом древе N. Далее следует N−1 строка, задающие родителя для каждого элемента древа, кроме родоначальника. Каждая строка имеет вид имя_потомка имя_родителя.

Выходные данные

Программа должна вывести список всех элементов древа в лексикографическом порядке. После вывода имени каждого элемента, необходимо вывести число его потомков.
 

Пример
Входные данные Выходные данные
1
9
Alexei Peter_I
Anna Peter_I
Elizabeth Peter_I
Peter_II Alexei
Peter_III Anna
Paul_I Peter_III
Alexander_I Paul_I
Nicholaus_I Paul_I
Alexander_I 0
Alexei 1
Anna 4
Elizabeth 0
Nicholaus_I 0
Paul_I 2
Peter_I 8
Peter_II 0
Peter_III 3
На летние каникулы Петя приехал в Байтландию. Как оказалась, история этого государства весьма необычна.

Изначально, до появления Байтландии, на её территории были расположены n различных стран. Каждое государство владело своей территорией, которую можно было представить на карте как прямоугольник, стороны которого параллельны осям координат, а вершины расположены в целочисленных точках. Никакие две страны не пересекались, однако они могли касаться сторонами. Иногда в результате агрессивных переговоров и мирных военных походов две страны объединялись в одну. Слияние происходило только в том случае, если после объединения их владений снова получалась прямоугольная территория. В конце концов осталось только одно государство — Байтландия.

В начале времён территория каждой страны содержала внутри себя ровно один прямоугольный замок, где стороны этого замка параллельны осям координат, а вершины расположены в целочисленных точках. Допускается, что границы замка могли прилегать к границе соответствующей территории страны и к границам других замков. Удивительным образом, даже после всех переворотов, замки прекрасно сохранились. Но, к сожалению, это единственная информация, которая позволяет хоть как-то судить об изначальном расположении стран.
 
Возможное формирование Байтландии. Замки отмечены синим цветом.
 
Петя не смог смириться с тем, что не осталось никаких данных об изначальных странах. У него возникло подозрение, что вся эта история всего лишь вымысел. Он знает, что вы умный человек, и поэтому просит у вас помощи. Требуется выяснить, существует ли расположение изначальных государств, для которых может быть верна данная история, или нет.

Входные данные
Первая строка содержит одно целое число n (1 ≤ n ≤ 100000) — количество замков и стран.

Каждая из следующих n строк содержат четыре целых числа ai, bi, ci, di (0 ≤ ai  < ci ≤ 109, 0 ≤ bi < di ≤ 109) — координаты вершин i-го замка, где (ai, bi) — координаты левой нижней точки, а (ci, di) — правой верхней.

Гарантируется, что никакие два замка не пересекаются, однако они могут касаться сторонами.

Выходные данные
Если существуют расположения изначальных стран, для которых верна данная история, то выведите « YES », иначе выведите « NO ».

Примечание
На картинках ниже изображено расположение замков в первом и втором примере.
Примеры
Входные данные Выходные данные
1 4
0 0 1 2
0 2 1 3
1 0 2 1
1 1 2 3
YES
2 4
0 0 2 1
1 2 3 3
2 0 3 2
0 1 1 3
NO
В свободное от программирования время Вася увлекается экспериментами, и его любимый — переливание воды между колбами. У него есть две колбы размером a и b миллилитров соответственно, и неограниченное количество воды. Вася может производить с ними следующие действия:
  •  Налить воду в первую колбу до края (после этого в ней будет a миллилитров воды)
  •  Полностью вылить воду из первой колбы
  •  Налить воду во вторую колбу до края (после этого в ней будет b миллилитров воды)
  •  Полностью вылить воду из второй колбы
  •  Перелить воду из первой колбы во вторую. В этом случае, если во второй колбе достаточно места, чтобы уместить всю текущую воду первой колбы, вода из первой колбы переливается полностью во вторую. Если же во второй колбе места недостаточно, вторая колба заполняется до предела (в ней после этого будет b миллилитров воды), а в первой колбе остается все остальное.
Состоянием колб Вася называет упорядоченную пару (x, y), где x — текущее количество воды в первой колбе, а y— во второй. Вася хочет изучить поставленную самим собой задачу и понять, сколько различных состояний он может получить описанными выше переливаниями.
Входные данные
В единственной строке входного  через пробел записаны два натуральных числа a и b (1 ≤ a, b ≤ 100) — емкости первой и второй колбы соответственно.
Выходные данные
В единственной строке выходного выведите одно число — число различных состояний, которое можно получить описанными в задаче переливаниями воды.
 
Ввод Вывод
2 5 14
Невзвешенный ориентированный граф задан своей матрицей смежности. Требуется построить его транзитивное замыкание, то есть матрицу, в которой в i-й строке и j-м столбце находится 1, если от вершины i можно добраться до вершины j, и 0 - иначе.
 
Входные данные
В первой строке дано число N (1<=N<=100) - число вершин в графе. Далее задана матрица смежности графа: в N строках даны по N чисел 0 или 1 в каждой. i-е число в i-й строке всегда равно 1.
 
Выходные данные
Необходимо вывести матрицу транзитивного замыкания графа в формате, аналогичным формату матрицы смежности.

Ввод Вывод
4
1 1 0 0
0 1 1 0
1 0 1 0
0 0 1 1
1 1 1 0 
1 1 1 0 
1 1 1 0 
1 1 1 1 

Дан связный ориентированный невзвешенный граф. Требуется вывести номера вершин из которых исходят все его перекрестные ребра (нумерация с 1).
 
Входные данные:
Целое число n и m - число вершин и ребер в графе.
Следующие m строк содержат 2 числа a и b, показывающие, что из вершины a есть ребро в вершину b.
 
Выходные данные:
В первой строке должно находиться число n - количество перекрестных ребер, в следующей строке должны быть перечисленны вершины в порядке возрастания без повторений. Если таковых нет, тогда следует вывести -1.
Поделиться
Класснуть