This shows you the differences between two versions of the page.
|
pa:laboratoare:laborator-07 [2026/04/21 00:41] radu.nichita [TLDR] |
pa:laboratoare:laborator-07 [2026/04/21 00:56] (current) radu.nichita [6) Giant Pizza] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Laborator 07: Parcurgerea grafurilor. Aplicații (2/2) ====== | ====== Laborator 07: Parcurgerea grafurilor. Aplicații (2/2) ====== | ||
| - | |||
| ===== Obiective laborator ===== | ===== Obiective laborator ===== | ||
| Line 6: | Line 5: | ||
| * Înțelegerea conceptelor de graf, reprezentare și parcugere | * Înțelegerea conceptelor de graf, reprezentare și parcugere | ||
| * Studierea unor aplicații pentru parcurgeri | * Studierea unor aplicații pentru parcurgeri | ||
| - | |||
| ===== Componente Conexe ===== | ===== Componente Conexe ===== | ||
| Line 15: | Line 13: | ||
| $muchii: { (1,2); (1,5); (2,5); (2,3); (3, 5); (4, 6);} $ | $muchii: { (1,2); (1,5); (2,5); (2,3); (3, 5); (4, 6);} $ | ||
| - | |||
| {{pa:new_pa:lab08-cc-example01.png}} | {{pa:new_pa:lab08-cc-example01.png}} | ||
| Line 27: | Line 24: | ||
| * 4 și 6 nu sunt accesibile din nodurile 1, 2, 3 și 5, prin urmare, acestea trebuie să facă parte din componente diferite. | * 4 și 6 nu sunt accesibile din nodurile 1, 2, 3 și 5, prin urmare, acestea trebuie să facă parte din componente diferite. | ||
| </spoiler> | </spoiler> | ||
| - | |||
| \\ | \\ | ||
| Line 36: | Line 32: | ||
| $muchii: {(1, 2); (1, 5); (2, 5); (2, 3); (3, 5); (4, 6); (5, 4)} $ | $muchii: {(1, 2); (1, 5); (2, 5); (2, 3); (3, 5); (4, 6); (5, 4)} $ | ||
| - | |||
| {{pa:new_pa:lab08-cc-example02.png}} | {{pa:new_pa:lab08-cc-example02.png}} | ||
| Line 48: | Line 43: | ||
| O componentă conexă reprezintă o partiție a nodurilor în submulțimi! <=> Fiecare nod face parte dintr-o singură componentă conexă! | O componentă conexă reprezintă o partiție a nodurilor în submulțimi! <=> Fiecare nod face parte dintr-o singură componentă conexă! | ||
| </note> | </note> | ||
| + | |||
| ==== Algoritmi ==== | ==== Algoritmi ==== | ||
| === DFS === | === DFS === | ||
| Line 99: | Line 95: | ||
| * Nodurile 2, 3 și 5 formeză un ciclu, prin urmare se poate ajunge de la oricare la oricare. | * Nodurile 2, 3 și 5 formeză un ciclu, prin urmare se poate ajunge de la oricare la oricare. | ||
| </spoiler> | </spoiler> | ||
| - | |||
| \\ | \\ | ||
| Line 119: | Line 114: | ||
| O componentă tare conexă reprezintă o partiție a nodurilor în submulțimi! <=> Fiecare nod face parte dintr-o singură componentă tare conexă! | O componentă tare conexă reprezintă o partiție a nodurilor în submulțimi! <=> Fiecare nod face parte dintr-o singură componentă tare conexă! | ||
| </note> | </note> | ||
| + | |||
| ==== Algoritmi ==== | ==== Algoritmi ==== | ||
| === TARJAN SCC === | === TARJAN SCC === | ||
| Line 241: | Line 237: | ||
| } | } | ||
| } | } | ||
| - | |||
| </code> | </code> | ||
| Line 263: | Line 258: | ||
| * https://www.youtube.com/watch?v=RpgcYiky7uw | * https://www.youtube.com/watch?v=RpgcYiky7uw | ||
| * https://iq.opengenus.org/kosarajus-algorithm-for-strongly-connected-components/ | * https://iq.opengenus.org/kosarajus-algorithm-for-strongly-connected-components/ | ||
| + | |||
| ===== Puncte de articulație ===== | ===== Puncte de articulație ===== | ||
| - | >> **Punct de articulație** / **nod critic** / **Cut Vertex** (**CV**) este un nod într-un graf **neorientat** a cărui eliminare duce la creșterea numărului de componente conexe (CC) - se elimină nodul împreună cu muchiile incidente. | + | >> **Punct de articulație** / **nod critic** / **Cut Vertex** (**CV**) este un nod într-un graf **neorientat** a cărui eliminare duce la creșterea numărului de componente conexe (CC) - se elimină nodul împreună cu muchiile incidente. |
| <spoiler CV - exemplu 01> | <spoiler CV - exemplu 01> | ||
| Line 329: | Line 325: | ||
| * **complexitate spațială ** : $S = O(n)$ | * **complexitate spațială ** : $S = O(n)$ | ||
| * recursivitate + câteva tablouri auxiliare de lungime n | * recursivitate + câteva tablouri auxiliare de lungime n | ||
| + | |||
| ===== Punți / muchii critice ===== | ===== Punți / muchii critice ===== | ||
| - | >> **Punte** / **muchie critică** / **Critical Edge** (**CE**) este o muchie într-un graf **neorientat** a cărei eliminare duce la creșterea numărului de componente conexe (CC) - se elimină muchia, fără a se sterge capetele (nodurile) acesteia. | + | >> **Punte** / **muchie critică** / **Critical Edge** (**CE**) este o muchie într-un graf **neorientat** a cărei eliminare duce la creșterea numărului de componente conexe (CC) - se elimină muchia, fără a se sterge capetele (nodurile) acesteia. |
| <spoiler CE - exemplu 01> | <spoiler CE - exemplu 01> | ||
| Line 351: | Line 348: | ||
| >> **TARJAN CE**: **(node, neigh)** is a **CE** if **low_link[neigh] > found[node]** where **neigh** in **adj[node]**. | >> **TARJAN CE**: **(node, neigh)** is a **CE** if **low_link[neigh] > found[node]** where **neigh** in **adj[node]**. | ||
| - | |||
| <spoiler Explicație> | <spoiler Explicație> | ||
| Line 372: | Line 368: | ||
| * **complexitate spațială ** : $S = O(n)$ | * **complexitate spațială ** : $S = O(n)$ | ||
| * recursivitate + câteva structuri de date de lungime $O(n)$ | * recursivitate + câteva structuri de date de lungime $O(n)$ | ||
| + | |||
| ===== Componente Biconexe ===== | ===== Componente Biconexe ===== | ||
| Line 394: | Line 391: | ||
| * Dacă ștergem oricare altă muchie, graful rămâne conex. | * Dacă ștergem oricare altă muchie, graful rămâne conex. | ||
| </spoiler> | </spoiler> | ||
| - | |||
| \\ | \\ | ||
| Line 415: | Line 411: | ||
| Împărțirea în componente biconexe a unui graf neorientat reprezintă **o partiție disjunctă a muchiilor grafului** (împreună cu vârfurile adiacente muchiilor). Acest lucru implică faptul că unele vârfuri pot face parte din mai multe componente biconexe diferite (vezi BCC - exemplu 01) - mai exact, punctele de articulație vor face parte din mai multe componente. | Împărțirea în componente biconexe a unui graf neorientat reprezintă **o partiție disjunctă a muchiilor grafului** (împreună cu vârfurile adiacente muchiilor). Acest lucru implică faptul că unele vârfuri pot face parte din mai multe componente biconexe diferite (vezi BCC - exemplu 01) - mai exact, punctele de articulație vor face parte din mai multe componente. | ||
| </note> | </note> | ||
| + | |||
| ==== TARJAN BCC ==== | ==== TARJAN BCC ==== | ||
| Se modifică algoritmul de CV. Se folosesc aceleași definiții și semnificații pentru **found** și **low_link**. | Se modifică algoritmul de CV. Se folosesc aceleași definiții și semnificații pentru **found** și **low_link**. | ||
| * Se folosește o stivă **edges_stack** în care se adaugă toate muchiile **(node, neigh)** atunci când se înaintează în recursivitate. | * Se folosește o stivă **edges_stack** în care se adaugă toate muchiile **(node, neigh)** atunci când se înaintează în recursivitate. | ||
| - | * Atunci când se termină de vizitat un copil **neigh**, dacă se îndeplinește condiția de **CV** (**low_link[neigh] >= found[node]**), înseamnă că prin eliminarea lui **node** tot subarborele **node - neigh - ...** rămâne deconectat. Prin urmare, toate muchiile din stivă de deasupra muchiei **(node, neigh)** (inclusiv) formează o componentă biconexă (mulțimea de noduri formată din capetele acestor muchii). | + | * Atunci când se termină de vizitat un copil **neigh**, dacă se îndeplinește condiția de **CV** (**low_link[neigh] >= found[node]**), înseamnă că prin eliminarea lui **node** tot subarborele **node - neigh - ...** rămâne deconectat. Prin urmare, toate muchiile din stivă de deasupra muchiei **(node, neigh)** (inclusiv) formează o componentă biconexă (mulțimea de noduri formată din capetele acestor muchii). |
| * Se termină de vizitat copilul curent și se trece la următorul. De fiecare dată când se găsește un copil **neigh** cu **low_link[neigh] >= found[node]** se formează o nouă **BCC**. | * Se termină de vizitat copilul curent și se trece la următorul. De fiecare dată când se găsește un copil **neigh** cu **low_link[neigh] >= found[node]** se formează o nouă **BCC**. | ||
| Line 427: | Line 424: | ||
| * recursivitate + câteva structuri de date de lungime $O(n)$ / $O(m)$ | * recursivitate + câteva structuri de date de lungime $O(n)$ / $O(m)$ | ||
| * ATENȚIE! În plus, față de CE/CV , se stochează o stivă de muchii. | * ATENȚIE! În plus, față de CE/CV , se stochează o stivă de muchii. | ||
| - | |||
| ===== Importanţă – aplicaţii practice ===== | ===== Importanţă – aplicaţii practice ===== | ||
| Line 437: | Line 433: | ||
| * Se poate folosi/modifica algoritmul lui Tarjan pentru a determina **SCC**, **CV** / **CE** / **BCC**. | * Se poate folosi/modifica algoritmul lui Tarjan pentru a determina **SCC**, **CV** / **CE** / **BCC**. | ||
| * Deoarece algoritmul se folosește de o parcurgere DFS, complexitatea este liniară în toate cazurile. | * Deoarece algoritmul se folosește de o parcurgere DFS, complexitatea este liniară în toate cazurile. | ||
| + | |||
| + | ===== Exerciții ===== | ||
| + | <note> | ||
| + | Scheletul de laborator se găsește pe pagina [[https://github.com/acs-pa/pa-lab/tree/main/skel/lab07|pa-lab::skel/lab07]]. | ||
| + | </note> | ||
| + | |||
| + | <note warning> | ||
| + | Înainte de a rezolva exercițiile, asigurați-vă că ați citit și înțeles toate precizările din secțiunea | ||
| + | [[https://ocw.cs.pub.ro/courses/pa/skel_graph | Precizari laboratoare 07-12]]. | ||
| + | |||
| + | Prin citirea acestor precizări vă asigurați că: | ||
| + | * știți **convențiile** folosite | ||
| + | * evitați **buguri** | ||
| + | * evitați **depunctări** la lab/teme/test | ||
| + | </note> | ||
| ====== 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: \\ | ||
| [[https://cses.fi/problemset/task/1684 | CSES - Giant Pizza]] | [[https://cses.fi/problemset/task/1684 | CSES - Giant Pizza]] | ||
| - | ===== Exercitii ===== | ||
| - | <note> | ||
| - | Scheletul de laborator se găsește pe pagina [[https://github.com/acs-pa/pa-lab/tree/main/skel/lab07|pa-lab::skel/lab07]]. | ||
| - | </note> | ||
| - | <note warning> | + | ===== Extra ===== |
| - | Înainte de a rezolva exercițiile, asigurați-vă că ați citit și înțeles toate precizările din secțiunea | + | |
| - | [[https://ocw.cs.pub.ro/courses/pa/skel_graph | Precizari laboratoare 07-12]]. | + | |
| - | Prin citirea acestor precizări vă asigurați că: | + | ==== Exerciții ==== |
| - | * știți **convențiile** folosite | + | |
| - | * evitați **buguri** | + | |
| - | * evitați **depunctări** la lab/teme/test | + | |
| - | + | ||
| - | </note> | + | |
| - | === Task-1: SCC === | + | <spoiler SCC> |
| Se dă un graf **orientat** cu **n** noduri și **m** arce. Să se găsească **componentele tare-conexe** folosind algoritmul lui **Tarjan**. Secțiunea de teorie conține exemple grafice explicate. | Se dă un graf **orientat** cu **n** noduri și **m** arce. Să se găsească **componentele tare-conexe** folosind algoritmul lui **Tarjan**. Secțiunea de teorie conține exemple grafice explicate. | ||
| Line 521: | Line 532: | ||
| * Java: 4s | * Java: 4s | ||
| </note> | </note> | ||
| + | </spoiler> | ||
| - | + | <spoiler CV> | |
| - | === Task-2: CV === | + | |
| Se dă un graf **neorientat conex** cu **n** noduri și **m** muchii. Se cere să se găsească toate **punctele critice** folosind algoritmul lui **Tarjan**. Secțiunea de teorie conține exemple grafice explicate. | Se dă un graf **neorientat conex** cu **n** noduri și **m** muchii. Se cere să se găsească toate **punctele critice** folosind algoritmul lui **Tarjan**. Secțiunea de teorie conține exemple grafice explicate. | ||
| Line 534: | Line 545: | ||
| * Java: 4s | * Java: 4s | ||
| </note> | </note> | ||
| + | </spoiler> | ||
| - | + | <spoiler CE> | |
| - | === Task-3: CE === | + | |
| Se dă un graf **neorientat conex** cu **n** noduri și **m** muchii. Se cere să se găsească toate **muchiile critice** folosind algoritmul lui **Tarjan**. Secțiunea de teorie conține exemple grafice explicate. | Se dă un graf **neorientat conex** cu **n** noduri și **m** muchii. Se cere să se găsească toate **muchiile critice** folosind algoritmul lui **Tarjan**. Secțiunea de teorie conține exemple grafice explicate. | ||
| Line 547: | Line 558: | ||
| * Java: 4s | * Java: 4s | ||
| </note> | </note> | ||
| + | </spoiler> | ||
| - | === Task-4: BCC === | + | <spoiler BCC> |
| Se dă un graf **neorientat conex** cu **n** noduri și **m** muchii. Se cere să se găsească toate **componentele biconexe** folosind algoritmul lui **Tarjan**. Secțiunea de teorie conține exemple grafice explicate. | Se dă un graf **neorientat conex** cu **n** noduri și **m** muchii. Se cere să se găsească toate **componentele biconexe** folosind algoritmul lui **Tarjan**. Secțiunea de teorie conține exemple grafice explicate. | ||
| Line 559: | Line 571: | ||
| * Java: 4s | * Java: 4s | ||
| </note> | </note> | ||
| + | </spoiler> | ||
| - | === Extra === | ||
| <spoiler rețele> | <spoiler rețele> | ||
| Rezolvați problema [[https://infoarena.ro/problema/retele| retele]] pe infoarena. | Rezolvați problema [[https://infoarena.ro/problema/retele| retele]] pe infoarena. | ||
| Line 568: | Line 580: | ||
| Rezolvați problema [[https://infoarena.ro/problema/clepsidra| clepsidra]] pe infoarena. | Rezolvați problema [[https://infoarena.ro/problema/clepsidra| clepsidra]] pe infoarena. | ||
| </spoiler> | </spoiler> | ||
| - | |||
| <spoiler Course schedule> | <spoiler Course schedule> | ||