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