Задано подвешенное дерево. Найдите для каждой вершины двоичные подъемы: предков, которые находятся от нее на расстоянии
В первой строке входа задано число
Выведите
Входные данные
8
5 8 5 0 4 5 4 1
Выходные данные
1: 5 4
2: 8 1 4
3: 5 4
4:
5: 4
6: 5 4
7: 4
8: 1 5
Дано подвешенное дерево с корнем в первой вершине. Вам нужно ответить на
В первой строке задано целое число
В следующих
Затем дано число
Далее заданы
Для каждого запроса выведите LCA двух вершин на отдельной строке.
Входные данные
5
1
1
2
3
2
2 3
4 5
Выходные данные
1
1
Входные данные
5
1
1
2
2
3
4 5
4 2
3 5
Выходные данные
2
2
1
Дано подвешенное дерево с корнем в первой вершине. Все ребра имеют веса (стоимости). Вам нужно ответить на
В первой строке задано целое число
В следующих
Далее заданы
Выведите ответы на запросы.
Входные данные
5
1 2
1 3
2 5
3 2
2
2 3
4 5
Выходные данные
2
2
Входные данные
5
1 1
1 2
2 3
3 4
2
1 4
3 2
Выходные данные
1
1
Карнотавры очень внимательно относятся к заботе о своем потомстве. У каждого динозавра обязательно есть старший динозавр, который его опекает. В случае, если опекуна съедают (к сожалению, в юрский период такое не было редкостью), забота о его подопечных ложится на плечи того, кто опекал съеденного динамозавра. Карнотавры — смертоносные хищники, поэтому их обычаи строго запрещают им драться между собой. Если у них возникает какой-то конфликт, то, чтобы решить его, они обращаются к кому-то из старших, которому доверяют, а доверяют они только тем, кто является их опекуном или опекуном их опекуна и так далее (назовем таких динозавров суперопекунами). Поэтому для того, чтобы решить спор двух карнотавров, нужно найти такого динозавра, который является суперопекуном для них обоих. Разумеется, беспокоить старших по пустякам не стоит, поэтому спорщики стараются найти самого младшего из динозавров, который удовлетворяет этому условию. Если у динозавра возник конфликт с его суперопекуном, то этот суперопекун сам решит проблему. Если у динозавра нелады с самим собой, он должен разобраться с этим самостоятельно, не беспокоя старших. Помогите динозаврам разрешить их споры.
Во входном файле записано число
-
+ v
— родился новый динозавр и опекунство над ним взял динозавр с номером$v$ . Родившемуся динозавру нужно присвоить наименьший натуральный номер, который до этого еще никогда не встречался. -
- v
— динозавра номер$v$ съели -
? u v
— у динозавров с номерами$u$ и$v$ возник конфликт и вам надо найти им третейского судью.
Изначально есть один прадинозавр номер 1; гарантируется, что он никогда не будет съеден.
Для каждого запроса типа «?» в выходной файл нужно вывести на отдельной строке одно число — номер самого молодого динозавра, который может выступить в роли третейского судьи.
Входные данные
11
+ 1
+ 1
+ 2
? 2 3
? 1 3
? 2 4
+ 4
+ 4
- 4
? 5 6
? 5 5
Выходные данные
1
1
2
2
5
Правительство небольшого города Мухоловска решило улучшить транспортную ситуацию в своем городе. Для этого была построена сеть трамвайных путей, соединяющая
Изначально по каждому трамвайному пути проходил хотя бы один трамвайный маршрут. Однако со временем некоторые маршруты оказались отменены, а, следовательно, и некоторые трамвайные пути стали невостребованными. Путь считается невостребованным, если ни один трамвайный маршрут по нему не проходит. С целью экономии средств невостребованные трамвайные пути Мухоловска было решено разобрать.
Ваша задача — написать программу для определения числа невостребованных путей.
Первая строка содержит единственное число
В следующей строке содержится число
В выходной файл выведите количество невостребованных трамвайных путей Мухоловска.
Входные данные
4
1 2
1 3
1 4
0
Выходные данные
3
Входные данные
7
1 2
2 3
2 4
5 2
5 6
7 5
3
1 7
2 4
7 6
Выходные данные
1
Иллюстрация ко второму примеру.
Пунктирной линией обозначен невостребованный путь.
Во время обсуждений в Парламенте лорды, с похожими взглядами на решение проблемы, обычно объединяются в группы. Как правило, результат обсуждения зависит от решения наиболее влиятельной группы лордов. Именно поэтому подсчёт влиятельности группы является наиболее важной задачей.
Естественно, каждый лорд дорожит древностью своего рода, поэтому влиятельность лорда равна древности его рода. Древность рода лорда — количество предков лорда: его отец, его дед, его прадед, и т.д. Чтобы посчитать влиятельность группы лордов, требуется посчитать количество лордов в группе вместе с их предками. Отметим, что если лорд является предком двух или более лордов в группе, то этот лорд должен быть посчитан только один раз.
Вам дано фамильное дерево лордов (удивительно, но все лорды произошли от одного пра-лорда) и список групп. Для каждой группы найдите её влиятельность.
Первая строка входного файла содержит число -1
. Гарантируется, что исходные данные формируют дерево. Третья строка входного файла содержит одно число
В выходной файл выведите
Входные данные
4
-1 1 2 3
4
1 4
2 3 4
3 2 3 4
4 1 2 3 4
Выходные данные
4
4
4
4
Входные данные
5
2 -1 1 2 3
10
3 3 4 1
3 2 4 3
4 1 3 5 4
1 4
2 2 3
3 1 4 3
1 2
3 3 4 5
1 1
3 1 2 4
Выходные данные
4
4
5
2
3
4
1
5
2
3
Задано дерево. В каждой вершине есть значение, изначально все значения равны нулю. Требуется обработать запрос прибавления на пути и запрос значения в вершине.
В первой строке задано целое число
В следующих
В следующей строке задано целое число
Следующие
-
+ v u d
— прибавить число$d$ во все значения в вершинах на пути от$v$ до$u$ $(1 ⩽ v, u ⩽ n; 1 ⩽ d ⩽ 10^9)$ ; -
? v
— вывести значение в вершине$v$ $(1 ⩽ v ⩽ n)$ .
Выведите ответы на все запросы.
Входные данные
5
1 2
1 3
3 4
3 5
5
+ 2 5 1
? 3
+ 1 1 2
? 1
? 3
Выходные данные
1
3
1
Есть граф из
-
link U V
— добавить ребро$UV$ . Гарантируется, что до этого запроса вершины$U$ и$V$ были в разных компонентах связности. -
cut U V
— удалить ребро$UV$ . Гарантируется, что такое ребро существовало. -
connected U V
— проверить, правда ли вершины$U$ и$V$ лежат в одной компоненте связности.
Первая строка содержит два числа
Для каждой операции connected V U
выведите
Входные данные
5 10
link 2 5
link 1 5
connected 1 2
cut 2 5
connected 1 2
connected 5 1
link 2 3
link 2 4
link 3 5
connected 1 2
Выходные данные
1
0
1
1
Есть граф из
-
link U V
— добавить ребро$UV$ . Гарантируется, что до этого запроса вершины$U$ и V были в разных компонентах связности. -
cut U V
— удалить ребро$UV$ . Гарантируется, что такое ребро существовало. -
size V
— узнать размер компоненты связности вершины$V$ .
Первая строка содержит два числа
Для каждой операции connected V U
выведите
Входные данные
5 10
link 2 5
link 1 5
size 1
cut 2 5
size 1
size 2
link 2 3
link 2 4
link 3 5
size 1
Выходные данные
3
2
1
5
Рассмотрим дерево
Выберем любую из вершин дерева
Вам задано
Первая строка содержит
Следующие
Выведите
Входные данные
3
1 2
2 3
Выходные данные
2 0 2
Входные данные
9
3 2
4 2
1 2
5 1
1 6
7 6
6 8
8 9
Выходные данные
0 1 2 2 1 1 6 6 8
Рассмотрим дерево из
Первая строка содержит
Следующие
Следующие
Для каждого запроса выведите ответ на него.
Входные данные
3 3
1 2
2 3
3 1
2 0
2 2
Выходные данные
2
2
1
Входные данные
9 5
3 2
4 2
1 2
5 1
1 6
7 6
6 8
8 9
9 1
6 2
2 6
7 1
2 4
Выходные данные
8
1
1
6
1
Рассмотрим дерево из
- Поменять цвет вершины.
- Найти сумму расстояний от заданной вершины до всех вершин того же цвета.
Первая строка содержит
Следующие
Следующие
Для каждого запроса второго типа выведите ответ на него.
Входные данные
3 3
1 2
2 3
2 1
1 2
2 2
Выходные данные
3
0
Входные данные
9 5
3 2
4 2
1 2
5 1
1 6
7 6
6 8
8 9
2 1
1 2
2 6
1 5
2 2
Выходные данные
14
13
2