Comentário por Henrique Vianna
Conhecimento prévio necessário:
Perceba que o enunciado se resume ao seguinte: Dada uma árvore
em que os vértices possuem valores
(que podem inclusive ser negativos), maximize
após a remoção de até
vértices, juntos às suas respectivas subárvores. Na resolução desse exercício, analisaremos cada uma das parciais, antes de chegar à solução final.
Parcial 1: A árvore é uma linha, ou seja,
.
Nessa parcial, podemos imaginar a a árvore como um vetor, em que as operações que podemos fazer é remover um sufixo seu. Perceba entretanto, que o valor de
é irrelevante: sempre existe uma solução ótima em que exatamente um sufixo é removido, podendo esse ser nulo. Por consequência, sempre manteremos um prefixo desse vetor, ou seja, a resposta é simplesmente a maior soma de prefixo de
.
Parcial 2:
e 
Para resolver essa parcial, faremos uso de uma dp, sendo que:
é o minimo que consigo remover com exatamente
operações entre os vértices da subárvore de
.
A recorrência dessa dp é relativamente simples. Faremos uso de uma segunda dp,
, para nos auxiliar nessa recorrência:
é o minimo que consigo remover em
operações considerando os
primeiros filhos de
.
A recorrência de
é bastante similar à DP clássica da Knapsack: deve-se brutar, para o filho atual, quantas operações serão feitas dentro de sua subárvore. Chamaremos esse numero de
. Sendo assim:
, tal que 
Ao final, para termos os valores de
de fato, basta fazermos:
, sendo
o numero de filhos de
.
A resposta é simplesmente
, com
.
Parcial 2: Sem restrições adicionais.
A
acima, apesar de ser suficiente para a parcial 2, não é rápida o suficiente para obter-se
pontos, haja vista sua complexidade de
. Precisamos, portanto, otimizá-la. Uma maneira inteligente de fazer isso é “linearizar” a árvore, fazendo uma
similar a essa em seu Euler Tour. Para tanto, basta calcularmos o
e
de cada um dos vértices numa
inicial. Calcularemos a
nos vértices ordenados por
. Define-se:
é o minimo que consigo remover com exatamente
operações entre os
últimos vértices do Euler Tour.
Vale notar que estamos calculando a nossa
no sufixo, ou seja, passando do ultimo vértice do Euler Tour ao primeiro. A recorrência, portanto, é dada por:
, sendo que
guarda a soma dos
na subárvore de
.
A resposta é calculada da mesma forma que na parcial
. Sendo assim, conseguimos resolver o problema em
.
Para melhor compreensão, confira o código aqui.
