copac

Time limit: 1s Memory limit: 64MB Input: copac.in Output: copac.out

Enunț

Se consideră un arbore cu NN noduri numerotate de la 11 la NN, dintre care KK sunt frunze (noduri cu gradul 11). Frunzele poartă numerele de ordine de la 11 la KK.

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 xx la frunza yy?”. 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 12 00012\ 000 î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 KK ș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 xx şi yy sunt numere întregi distincte cuprinse între 11 şi KK, funcția returnând distanța dintre nodurile xx și yy.

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

  • 3K3 0003 \leq K \leq 3 \ 000;
  • Numărul de noduri din arborele rezultat nu va depăşi 10 00010\ 000.
  • Dacă programul nu respectă interacţiunea stabilită, va lua 00 puncte pe testul respectiv.
  • Trebuie să includeți copac.h

Log in or sign up to be able to send submissions!