EduBrick

D. Сумма длин путей

2000 мс · 256 МБ · всё или ничего

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

Наивно - запустить обход из каждой вершины: O(n2)O(n^2), при n=105n = 10^5 это 101010^{10}. Нужен способ получить ответ сразу для всех, и он называется сменой корня.

Формат ввода

В первой строке - число nn (1≤n≤1051 \le n \le 10^5).

В следующих n−1n - 1 строках - тройки vv, uu, ww (1≤v,u≤n1 \le v, u \le n, 0≤w≤1060 \le w \le 10^6): ребро между vv и uu веса ww.

Формат вывода

Выведите nn чисел: для каждой вершины сумму взвешенных расстояний до всех остальных.

Примеры

ввод
3
1 2 1
1 3 3
вывод
4 5 7
ввод
7
1 2 1
3 4 1
7 6 1
7 5 1
7 1 1
1 4 1
вывод
9 14 17 12 15 15 10
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.