Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 zborO rută ''​→ 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'' ​zboruriCerinț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 ''​- 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 sirea tuturor conexiunilor ​critice din rețea.+**Enunț:** Se dă o rețea de ''​n''​ noduri (servere) numerotate de la 0 la ''​- 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 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 întregmaximul 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. "2" înseamnă că dorește ​ingredientul ​1dar 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 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 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>​
pa/laboratoare/laborator-07.1776721293.txt.gz · Last modified: 2026/04/21 00:41 by radu.nichita
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0