Subarbore
Observăm că numărul de noduri speciale T este foarte mic, deci problema admite o soluţie exponenţială. Vom construi următoarea dinamică: D[i][j] = dimensiunea minimă a unui subarbore care conţine nodurile speciale corespunzătoare biţilor de 1 din configuraţia binară a lui i, şi are rădăcina în nodul j. Avem două metode prin care putem construi un astfel de subarbore:
- Unim doi subarbori mai mici care au rădăcina în acelaşi nod j şi acoperă două mulţimi disjuncte de noduri speciale.
- Având un subarbore cu rădăcina în alt nod x, adăugăm un lanţ de la nodul j la nodul x.
Astfel, recurenţa noastră devine:
D[i][j] = minim din:
- D[i1][j] + D[i2][j], unde i1 or i2 = i (submulţimile i1 şi i2 reunite dau submulţimea i) şi i1 and i2 = 0 (submulţimile sunt disjuncte). Submulţimile pot fi găsite de exemplu, găsind mai întâi pe i1 astfel încât să fie o submulţime a lui i, iar apoi aflăm pe i2 = i - i1;
- D[i][x] + Dist[j][x], unde în matricea Dist avem precalculate distanţele între oricare două noduri din arbore. Această precalculare poate fi făcută aplicând algoritmul Roy-Floyd.
Este important ca, pentru orice stare i, să calculăm întâi dinamica pentru toate rădăcinile j bazându-ne pe prima parte a recurenţei (unirea a doi arbori) şi abia apoi pe a doua (prelungirea unui lanţ) deoarece rezultatele celei de-a doua recurenţe depind de cele obţinute din prima.
Complexitate: O(3T*N + 2T*N2) timp şi O(2T*N) memorie.
