eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Опасность

Опасность

Задано неориентированное дерево с n вершинами, ребрам которого присвоены веса. Необходимо выполнить запросы двух типов:

  1. Прибавить значение ai ко всем ребрам на пути от вершины vi до вершины ui. Этого типа имеется не более 500 запросов.
  2. Вычислить сумму весов всех ребер, оба конца которых находятся на расстоянии не более ki от vi. Расстояние между двумя вершинами равно числу ребер на пути между ними.

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

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

Первая строка содержит два числа n и q (1n1000, 0q500000) - количество вершин в дереве и количество запросов. Следующая n - 1 строка содержит описание дерева: i-ая строка содержит три числа vi, ui и wi (1vi, uin, 1wi100000) - номера вершин, соединенных ребром, и его вес. Гарантируется, что граф является деревом.

Следующие q строк описывают запросы. В этих строках первым числом ti является тип запроса (1ti2). Если ti = 1, то далее следуют три числа vi, ui и ai (1vi, uin, 1ai100000), означающих что надо добавить ai ко всем ребрам на пути от vi до ui. Если ti = 2, то далее следуют два числа vi и ki (1vin, 1kin), означающих что надо найти сумму весов всех ребер, концы которых находятся на расстоянии не больше ki от вершины vi. Гарантируется, что запросов первого типа не более 500.

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

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

Лимит времени 2 секунды
Лимит использования памяти 128 MiB
Входные данные #1
5 5
1 2 1
2 3 2
3 4 3
3 5 1
2 2 1
2 4 2
1 1 4 2
2 1 2
2 3 3
Выходные данные #1
3
6
7
13
Источник 2013 Петрозаводск, Moscow SU ST + NNSU Contest, День 2, Август 24, Задача I