Как найти все равные пути в вырожденном дереве, которые начинаются на определенной вершине?

у меня есть немногоdegenerate tree (выглядит как массив или двусвязный список). Например, вот это дерево:

Каждый край имеет некоторый вес. Я хочу найти все равные пути, которые начинаются в каждой вершине.

Другими словами, я хочу получить все кортежи (v1, v, v2), где v1 и v2 - произвольные предки и потомки, так чтоc(v1, v) = c(v, v2).

Пусть ребра имеют следующие веса (это просто пример):

a-b = 3

b-c = 1

c-d = 1

d-e = 1

Затем:

ВершинаA не имеет равного пути (нет вершины с левой стороны).ВершинаB имеет одну равную пару. ПутьB-A равняется путиB-E (3 == 3).ВершинаC имеет одну равную пару. ПутьB-C равняется путиC-D (1 == 1).ВершинаD имеет одну равную пару. ПутьC-D равняется путиD-E (1 == 1).ВершинаE не имеет равного пути (нет вершины с правой стороны).

Я реализую простой алгоритм, который работает вO(n^2), Но это слишком медленно для меня.

Ответы на вопрос(1)

Ваш ответ на вопрос