Camionas
Solutii prezentate de Teodor Plop •Teodor94.
Solutia 1: O(M * log N) - 100 puncte
Basmul poate fi privit ca un graf orientat cu N noduri si M muchii, in care fiecare muchie are o rezistenta si se garanteaza ca exista cel putin un drum intre nodul 1 si nodul N.
Rezistenta unei muchii trebuie marita doar daca aceasta este mai mica strict decat greutatea camionasului. Deci, raspunsul problemei este numarul minim de muchii cu rezistenta strict mai mica decat G prin care este nevoit camionasul sa treaca, mergand din nodul 1 si oprindu-se in nodul N. Astfel, putem atribui costuri muchiilor astfel:
- O muchie i are costul 1, daca rezistenta ei este mai mica strict decat greutatea camionasului (g i < G).
- O muchie i are costul 0, daca rezistenta ei este mai mare decat greutatea camionasului (g i >= G).
In concluzie, problema se reduce la gasirea drumului de cost minim intre nodul 1 si nodul N. O solutie este un algoritm de tip Dijkstra.
Solutia 2: O(M + N) - 100 puncte
Bazandu-ne pe aceeasi observatie ca si la solutia anterioara, putem identifica componentele conexe din graful initial, folosind doar muchiile ce au cost 0. Astfel, putem crea un nou graf, avand ca noduri componentele conexe identificate. Apoi, vom trage muchiile ce au cost 1 pentru a uni aceste componente conexe intre ele. Deci, problema se reduce acum la gasirea unui drum de lungime minima intre componenta conexa in care se afla nodul 1 si cea in care se afla nodul N. Aceasta lungime minima se gaseste foarte usor cu o parcurgere in latime.