Контест Middle RAII и умные указатели обновлено

Дерево на unique_ptr: перенос и удаление поддеревьев

Условие

Дерево каталогов хранится так, что каждый узел владеет детьми: std::vector<std::unique_ptr<Node>> children. Изначально есть только корень root. Команды:

  • add p c: создать узел c последним ребёнком узла p;
  • move c p: перенести узел c со всем поддеревом последним ребёнком узла p (гарантируется, что p не лежит в поддереве c и c не корень);
  • del c: удалить узел c со всем поддеревом и вывести, сколько узлов удалено (c не корень).

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

Ввод: q (1 ≤ q ≤ 3000), затем q команд.

Вывод: по строке на каждую del, затем строка с обходом.

Пример 1

Ввод:

5
add root a
add a b
add root c
move b c
del a

Вывод:

1
root c b

Пример 2

Ввод:

3
add root x
add x y
del x

Вывод:

2
root

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.