Дерево можно разделить на два разных дерева, удалив один из его краев. Учитывая дерево с N
узлами, уникально идентифицированными целыми числами в диапазоне [0, N-1]
, мне нужно написать функцию, которая находит край, который необходимо удалить из дерева, так что разница между суммами всех идентификаторов узлов в результате деревья сведены к минимуму.Резка кромок в деревьях
Функция должна печатать минимальную разницу, которую он обнаружил для стандартного вывода (стандартный вывод).
Функция получит следующие аргументы:
parent
, который представляет собой массив из целых чисел со следующим значением: parent[i]
= родитель узла i
(более конкретно его ID)
parent[i] = -1
, если я есть ни один родитель (я не корень дерева)
ограничения данных
Максимальное число узлов в дереве составляет 50000
Эффективность ограничения
Функция, как ожидается, чтобы распечатать результат менее чем за 2 секунды
Пример
Input parent: [1, 4, 4, 2, -1, 2, 2]
aka : 4
/\
1 2
// | \
0 3 5 6
Output: 9
Объяснение: Мы удаляем край между узлами 2 и 6.
Можете ли вы подробно остановиться на том, где вы застряли? У вас есть код, с которого вы начали? – Mikeb