Искать динамическим программированием по дереву: снизу вверх решать задачу для поддерева с корнем в данной вершине. Для этого легко заметить, что такой путь либо не проходит через корень - тогда он ищется среди детей, - либо проходит - тогда нужно знать две наиболее удалённые вершины. Это тоже легко поддерживать. Сложность, разумеется, получится

, где

- число вершин в графе.