В ациклическом ориентированном графе, самое простое - это DFS.
Рекурсивная функция, которая возвращает самый длинный путь с заданной вершины. С запоминантем ответа - если уже запускались с этой вершины, возвращаем уже подсчитанный результат. Иначе перебираем все ребра из этой вершины и берем максимум из dfs от конца ребра + длина ребра. Запоминаем этот максимум и возвращаем результат.