Как посчитать сумму длин всех путей дерева?
n до 10^5, нужно посчитать за секунду.
Наверное, это можно сделать динамикой, я взял dp[v] – сумма длин всех путей, полностью лежащих внутри поддерева v.
Проблема в обновлении.
Пусть мы находимся в вершине v.
Как посчитать сумму длин всех путей, которые полностью лежат в поддереве v и проходят через v?
У меня есть только одна идея: посчитать расстояние от каждой вершины до корня, потом втупую просуммировать по формуле
dist(u1, u2) = root_dist(u1) + root_dist(u2) - 2 * root_dist(lca(u1, u2))
Но это в лучшем случае O(n²), боюсь, что это не зайдёт.