Выведите единственный путь между двумя заданными вершинами в данном графе - PullRequest
1 голос
/ 12 апреля 2020

Вершина n в форме дерева, соединенная ребром n-1. Затем я должен найти общую стоимость от (до ребра b) согласно запросу. Каждое ребро дало определенную c стоимость. Я пытаюсь сделать это с помощью DFS. Но я получаю TLE. Есть кто-то лучше подходить.
Пожалуйста, предложите лучший подход. Отдельное спасибо за них!

1 Ответ

1 голос
/ 12 апреля 2020

Root дерево произвольно и предварительно вычислить расстояние от root до каждого узла. Затем для каждого запроса (a,b) вычисляется наименьший общий предок из a и b (назовите его c), и тогда расстояние между ними будет (с dist[i], представляющим расстояние от root) dist[a]+dist[b]-2*dist[c]. Предварительное вычисление расстояния выполняется в O(N), предварительное вычисление LCA - в O(NlogN), и каждый отдельный запрос может выполняться в O(logN) (в зависимости от реализации).

В сети много ресурсов по этой проблеме, поэтому не стесняйтесь Google еще немного, если страница Hackerrank, на которую я ссылался, недостаточна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...