Презентация
Вы - ученый, исследующий алгоритмы на бинарных деревьях. Бинарное дерево - это структура данных, состоящая из узлов ветвления и листов. Каждый узел ветвления имеет левого и правого сына, каждый сын - или узел ветвления, или лист. Корнем дерева является узел ветвления, у которого нет родителя.
Вы готовитесь к презентации, где Вам следует создать изображение бинарных деревьев при помощи программного обеспечения. Вы уже создали картинку, на которой изображено бинарное дерево, состоящее из одного узла ветвления и двух листьев (Рисунок 1). Однако внезапно у Вас сломалась функция, позволяющая программе создавать рисунок. Вы очень расстроились, так как через пять часов Вам следует сделать презентацию перед большой аудиторией.
Вы решили создать изображение бинарных деревьев, используя только функции копирования, сжатия и вставки. То есть Вы можете совершать только следующие два типа операций:
Скопировать текущую фигуру в буфер обмена (фигура копируется в буфер, предыдущее его содержимое удаляется).
Вставить скопированную фигуру (с масштабированием, если необходимо), прикрепив корень вставленной фигуры к листу текущей (скопированную фигуру можно вставлять много раз).
Более того, Вы решили сделать фигуру, совершив наименьшее количество операций вставки, поскольку именно операция вставки требует много времени. Ваша задача - найти наименьшее количество операций вставки для создания заданной фигуры.
Рисунок 1: начальное состояние
Ответ на пример 1 (Рисунок 4) равен 3, так как требуемую фигуру можно получить совершив следующий минимум операций.
Рисунок 2: промежуточная часть 1
Рисунок 3: промежуточная часть 2
Рисунок 4: Цель
Входные данные
Входная строка задает бинарное дерево. Грамматика выражения задается следующей БНФ:
::= | "(" ")"
::= "()"
Входные данные удовлетворяют указанному синтаксису. Считайте, что каждое входное дерево имеет хотя бы один и не более 10^5 узлов ветвления.
Выходные данные
Наименьшее количество операций вставки, которое следует выполнить для получения заданного бинарного дерева.