Editorial for Takmičenje
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Napravimo ternarno stablo na sledeći način. Napravimo po jedan list za savku poziciju u početnom redu. Zatim uzimajmo prva 3 čvora iz reda i napravimo novi čvor koji će biti njihov direktni predak. Ubacimo novi čvor na kraj reda. To ponavljamo sve dok ne ostane samo jedan čvor u redu i on je koren stabla. Ako bismo u listove upisali nivoe veštine takmičara i u svaki čvor upisali medijanu brojeva njegovih direktnih potomaka u korenu bismo dobili nivo veštine pobednika.
Problem ćemo dalje rešavati binarnom pretragom po vrednosti rešenja. Recimo da proveravamo da li je rešenje barem . Da bi u nekom čvoru imali broj veći ili jednak
, bar 2 njegova direktna potmoka moraju imati brojeve veće ili jednake
. Dinamičkim programiranjem na stablu ćemo odrediti koliko najmanje brojeva većih ili jednakih
treba da stavimo u prazne listove kako bi u korenu stabla bio broj veći ili jednak
. Neka je
ova vrednost ako posmatramo samo podstablo čvora
. Za prazne listove
. Za listove u koje je već upisan broj veći ili jednak
,
, a ako je uisan broj manji od
,
. Za ostale čvorove ovu vrednost računamo po formuli
gde su
,
i
direktni potomci čvora
i
. Ako je
manje ili jednako broju takmičara koji nisu poranili i imaju
, rešenje je veće ili jednako
.
Vremenska složenost:
Zadatak je preuzet sa
.
Comments