This shows you the differences between two versions of the page.
|
pa:laboratoare:laborator-07 [2026/04/21 00:43] radu.nichita |
pa:laboratoare:laborator-07 [2026/04/21 00:56] (current) radu.nichita [6) Giant Pizza] |
||
|---|---|---|---|
| Line 451: | Line 451: | ||
| ====== Pool probleme (pentru prezentări) ====== | ====== Pool probleme (pentru prezentări) ====== | ||
| - | ======= 1) Planets and Kingdoms ======= | + | ======= 1) Longest Flight Route ======= |
| - | **Enunț:** Se consideră un graf orientat cu ''N'' planete și ''M'' rute de zbor. O rută ''a → b'' indică faptul că există zboruri de la planeta ''a'' la planeta ''b''. Două planete fac parte din același „regat” dacă există drumuri în ambele direcții între ele (direct sau indirect). Se cere determinarea numărului de regate și atribuirea unui identificator de regat pentru fiecare planetă în parte. | + | **Enunț:** Se consideră un graf orientat aciclic (DAG) cu ''n'' orașe și ''m'' zboruri. Cerința este să se determine cel mai lung traseu posibil de la orașul 1 la orașul ''n''. Traseul reprezintă secvența de orașe vizitate. Dacă există mai multe trasee de lungime maximă, oricare variantă este acceptată. |
| - | **Date de intrare:** Numerele ''N'' și ''M'', urmate de ''M'' linii ce conțin muchiile orientate. | + | **Date de intrare:** Prima linie conține două numere întregi ''n'' și ''m''. Următoarele ''m'' linii conțin perechi de noduri ''a'' și ''b'', reprezentând un zbor orientat de la orașul ''a'' la orașul ''b''. |
| - | **Date de ieșire:** Numărul de componente tare conexe (regate), urmat de identificatorul componentei pentru fiecare planetă în parte. | + | **Date de ieșire:** Prima linie va conține un număr întreg reprezentând numărul maxim de orașe vizitate. A doua linie va conține secvența de orașe din traseul găsit, separate prin spațiu. Dacă nu există niciun drum valid de la 1 la ''n'', se va afișa textul "IMPOSSIBLE". |
| + | |||
| + | Problema se poate testa la: \\ | ||
| + | [[https://cses.fi/problemset/task/1680 | CSES - Longest Flight Route]] | ||
| + | |||
| + | ======= 2) Planets and Kingdoms ======= | ||
| + | |||
| + | **Enunț:** Se consideră un graf orientat cu ''n'' planete și ''m'' rute de zbor. O rută ''a → b'' indică faptul că se poate zbura de la planeta ''a'' la planeta ''b''. Două planete fac parte din același „regat” dacă există drumuri în ambele direcții între ele (direct sau indirect). Să se determine numărul total de regate și să se atribuie fiecărei planete un identificator de regat. | ||
| + | |||
| + | **Date de intrare:** Prima linie conține două numere întregi ''n'' și ''m''. Următoarele ''m'' linii conțin câte două numere întregi ''a'' și ''b'', reprezentând o rută de zbor orientată de la ''a'' la ''b''. | ||
| + | |||
| + | **Date de ieșire:** Afișați pe prima linie numărul de regate. Pe a doua linie, afișați pentru fiecare planetă identificatorul regatului din care face parte. (indexare de la 1, se acceptă orice soluție validă) | ||
| Problema se poate testa la: \\ | Problema se poate testa la: \\ | ||
| [[https://cses.fi/problemset/task/1683 | CSES - Planets and Kingdoms]] | [[https://cses.fi/problemset/task/1683 | CSES - Planets and Kingdoms]] | ||
| - | ======= 2) Critical Connections in a Network ======= | + | ======= 3) Critical Connections in a Network ======= |
| - | **Enunț:** Se dă o rețea de ''N'' noduri (servere) numerotate de la 0 la ''N - 1'', conectate prin conexiuni bidirecționale. O conexiune este critică dacă eliminarea ei crește numărul de componente conexe (adică rețeaua devine mai puțin conectată). Se cere găsirea tuturor conexiunilor critice din rețea. | + | **Enunț:** Se dă o rețea de ''n'' noduri (servere) numerotate de la 0 la ''n - 1'', conectate prin conexiuni bidirecționale. O conexiune este considerată „critică” dacă eliminarea ei crește numărul de componente conexe (adică rețeaua devine mai puțin conectată). Cerința este de a găsi toate conexiunile critice din rețea. |
| - | **Date de intrare:** Numărul ''N'', urmat de o listă cu muchiile bidirecționale existente între servere. | + | **Date de intrare:** Un număr întreg ''n'', reprezentând numărul de servere, urmat de o listă de muchii bidirecționale care definesc conexiunile din rețea. |
| - | **Date de ieșire:** O listă a tuturor muchiilor critice găsite. | + | **Date de ieșire:** O listă a tuturor conexiunilor critice identificate în rețea. |
| Problema se poate testa la: \\ | Problema se poate testa la: \\ | ||
| [[https://leetcode.com/problems/critical-connections-in-a-network/ | LeetCode - Critical Connections in a Network]] | [[https://leetcode.com/problems/critical-connections-in-a-network/ | LeetCode - Critical Connections in a Network]] | ||
| - | ======= 3) Planets Cycles ======= | + | ======= 4) Planets Cycles ======= |
| - | **Enunț:** Se dau ''N'' planete. Fiecare planetă are exact o muchie orientată către o altă planetă (posibil chiar către ea însăși). Pornind dintr-o planetă, traseul continuă strict pe muchia curentă. Pentru fiecare planetă, se cere determinarea numărului de planete diferite vizitate înainte de a intra într-un ciclu repetitiv. | + | **Enunț:** Se dau ''n'' planete, fiecare planetă având exact o muchie orientată către o altă planetă (se poate indica chiar către ea însăși). Pornind dintr-o planetă, un explorator va continua să sară pe următoarea conform muchiei. Pentru fiecare planetă, se cere să determini câte planete diferite va vizita exploratorul până când ajunge pe o planetă deja văzută. |
| - | **Date de intrare:** Numărul ''N'', urmat de un vector ''t_1, t_2, ..., t_N'', unde informația reprezintă o muchie direcționată de la ''i'' la ''t_i''. | + | **Date de intrare:** Prima linie conține un număr întreg ''n''. A doua linie conține un vector de ''n'' elemente ''t_1, t_2, ..., t_n'', unde valoarea ''t_i'' indică destinația muchiei orientate care pleacă din planeta ''i'' (adică ''i → t_i''). |
| - | **Date de ieșire:** Pentru fiecare nod, numărul de noduri vizitate înainte de a intra într-un ciclu repetitiv. | + | **Date de ieșire:** Afișați o singură linie cu ''n'' numere întregi: pentru fiecare nod, afișați numărul de noduri vizitate înainte de a repeta un nod. |
| Problema se poate testa la: \\ | Problema se poate testa la: \\ | ||
| [[https://cses.fi/problemset/task/1751 | CSES - Planets Cycles]] | [[https://cses.fi/problemset/task/1751 | CSES - Planets Cycles]] | ||
| - | ======= 4) Coin Collector ======= | + | ======= 5) Coin Collector ======= |
| - | **Enunț:** Se dă un graf orientat cu ''N'' noduri și ''M'' muchii. Fiecare nod conține un anumit număr de monede. Traseul poate începe din orice nod, iar deplasarea se face exclusiv pe muchiile orientate. De fiecare dată când este vizitat un nod, se colectează toate monedele de acolo (o singură dată per traseu). Se cere determinarea numărului maxim de monede ce pot fi colectate. | + | **Enunț:** Fie un graf orientat cu ''n'' noduri și ''m'' muchii. Fiecare nod conține un anumit număr de monede. Poți începe traseul din orice nod și te poți deplasa doar folosind muchiile orientate. De fiecare dată când vizitezi un nod, colectezi toate monedele din acel nod (lucru care se poate face o singură dată per nod pe parcursul unui traseu). Cerința este să determini numărul maxim de monede pe care le poți colecta. |
| - | **Date de intrare:** Prima linie conține numerele ''N'' și ''M''. A doua linie conține valorile ''c_1, c_2, ..., c_N'' (monedele din fiecare nod). Următoarele ''M'' linii conțin muchiile orientate sub forma ''a b'' (de la ''a'' la ''b''). | + | **Date de intrare:** Prima linie conține două numere întregi ''n'' și ''m''. A doua linie conține valorile ''c_1, c_2, ..., c_n'', reprezentând monedele din fiecare nod. Următoarele ''m'' linii descriu muchiile orientate sub forma ''a b'', adică o muchie de la ''a'' la ''b''. |
| - | **Date de ieșire:** Un număr întreg reprezentând maximul de monede colectabile. | + | **Date de ieșire:** Un singur număr întreg: maximul de monede ce pot fi colectate. |
| Problema se poate testa la: \\ | Problema se poate testa la: \\ | ||
| [[https://cses.fi/problemset/task/1686 | CSES - Coin Collector]] | [[https://cses.fi/problemset/task/1686 | CSES - Coin Collector]] | ||
| - | ======= 5) Giant Pizza ======= | + | ======= 6) Giant Pizza ======= |
| - | **Enunț:** O familie cu ''N'' membri dorește să comande o pizza. Există ''M'' ingrediente (topping-uri) posibile. Fiecare membru al familiei are exact două preferințe legate de pizza, fiecare preferință specificând dacă un anumit ingredient ar trebui inclus (+) sau exclus (-). Se cere determinarea unei rețete de pizza (ce ingrediente sunt incluse și care sunt excluse) astfel încât cel puțin o preferință a fiecărui membru al familiei să fie respectată. | + | **Enunț:** O familie cu ''n'' membri dorește să comande o pizza. Există ''m'' ingrediente posibile. Fiecare membru al familiei are exact două preferințe legate de pizza, fiecare preferință specificând dacă un anumit ingredient ar trebui inclus (+) sau exclus (-). Sarcina ta este să determini dacă există o rețetă de pizza astfel încât cel puțin o preferință a fiecărui membru al familiei să fie respectată. |
| - | **Date de intrare:** Prima linie conține două numere întregi ''N'' (numărul de membri ai familiei) și ''M'' (numărul de ingrediente). Următoarele ''N'' linii descriu preferințele fiecărui membru, având formatul: un caracter (''+'' sau ''-''), un număr întreg (ingredientul), un alt caracter (''+'' sau ''-'') și un alt număr întreg. | + | **Date de intrare:** Prima linie conține două numere întregi ''n'' și ''m''. Următoarele ''n'' linii conțin câte două perechi de valori reprezentând preferințele membrilor (ex. "+ 1 - 2" înseamnă că dorește ingredientul 1, dar nu dorește ingredientul 2). O preferință este îndeplinită dacă pizza finală respectă măcar una dintre cele două condiții alese de membru. |
| - | **Date de ieșire:** Afișarea unei linii cu o soluție validă formată din caractere ''+'' și ''-'' reprezentând starea fiecărui ingredient de la 1 la ''M'', despărțite prin spațiu, sau textul "IMPOSSIBLE" dacă nu există nicio rețetă care să satisfacă cerințele. | + | **Date de ieșire:** Afișați o linie cu textul "IMPOSSIBLE" dacă nicio combinație nu poate satisface cerințele. Dacă o rețetă validă există, afișați textul "SATISFIABLE" pe prima linie, iar pe a doua linie afișați o serie de caractere '+' și '-', despărțite prin spațiu, indicând pentru fiecare ingredient (de la 1 la ''m'') dacă va fi inclus sau nu în pizza. |
| Problema se poate testa la: \\ | Problema se poate testa la: \\ | ||