Enunț
Se consideră un arbore cu noduri numerotate de la la , dintre care sunt frunze (noduri cu gradul ). Frunzele poartă numerele de ordine de la la .
Despre acest arbore nu se cunosc alte informaţii dar, din fericire, se pot adresa întrebări de tipul “care este distanţa de la frunza la frunza ?”. Distanţa dintre două noduri din arbore este egală cu numărul de muchii aflate pe lanţul elementar ce uneşte cele două noduri.
Cerință
Determinaţi arborele punând cel mult întrebări.
Protocol de interacțiune
Programul vostru nu va citi şi nu va scrie nici un fişier. În schimb, va trebui să implementați funcția
std::vector<int> solve(int K);
care primește ca parametru numărul de frunze și returnează vectorul de tați al arborelui (nu contează care nod este considerat rădăcină). Pentru a determina arborele, puteți apela funcția
int query(int x, int y);
unde şi sunt numere întregi distincte cuprinse între şi , funcția returnând distanța dintre nodurile și .
Exemplu
- Comisia apelează
solve(3)
. - Concurentul apelează
query(1, 2)
care returnează3
. - Concurentul apelează
query(2, 3)
care returnează3
. - Concurentul apelează
query(1, 3)
care returnează2
. - Funcția
solve
returnează{4, 5, 4, 0, 4}
.
Restricții și precizări
- ;
- Numărul de noduri din arborele rezultat nu va depăşi .
- Dacă programul nu respectă interacţiunea stabilită, va lua puncte pe testul respectiv.
- Trebuie să includeți
copac.h