Первый подход. Присвойте каждому ребру обратную величину веса начального узла и примените алгоритм кратчайшего пути, такой как Беллман-Форд .Алгоритм Дейкстры не будет работать, так как некоторые ребра могут быть отрицательными.
Второй подход, начиная с каждого конечного узла, добавляет «теги» к каждому ребру, который отслеживает идентификаторы всех задействованных узлов, иобщий вес.Нет необходимости отмечать узел, так как каждый узел гарантированно посещается только один раз для каждой цепочки, начинающейся на листьях.Например, учитывая следующий ациклический ориентированный граф (направленный сверху вниз), где каждый узел весит 1:
A G
/ \ /
/ \ /
B C
| / \
D E F
\ /
H
Граница между A и B будет помечена {{D, B, A}, 3}у края между A и C будет два тега {{H, E, C, A}, 4} и {{H, F, C, A}, 4}.
После этой предварительной обработкинайдите путь наибольшего веса для каждого корневого узла.Информация находится в тегах их исходящих ребер.