Differences

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

Link to this comparison view

pa:laboratoare:laborator-09 [2026/01/21 12:53]
darius.neatu [Laborator 09: Drumuri minime în grafuri: surse / destinații multiple. (2/2)]
pa:laboratoare:laborator-09 [2026/05/11 02:05] (current)
radu.nichita [Exerciții]
Line 1: Line 1:
 ====== Laborator 09: Drumuri minime în grafuri: surse / destinații multiple. (2/2) ====== ====== Laborator 09: Drumuri minime în grafuri: surse / destinații multiple. (2/2) ======
- 
  
 {{:​pa:​new_pa:​partners:​adobe-logo.png?​250 |}} {{:​pa:​new_pa:​partners:​adobe-logo.png?​250 |}}
Line 418: Line 417:
     * **graf rar**: aplicăm Johnson și obținem $O(n * m * log (n))$.     * **graf rar**: aplicăm Johnson și obținem $O(n * m * log (n))$.
  
-===== Exerciții ​===== +===== Implementarea algoritmilor standard ​=====
  
 <​note>​ <​note>​
 +[[https://​github.com/​acs-pa/​pa-lab/​tree/​main/​algorithms/​lab09|pa-lab/​algorithms/​lab09]] conține implementarea algoritmilor standard / tehnicilor / tiparelor de algoritmi pentru acest laborator.
 +</​note>​
  
-Scheletul de laborator se găsește pe pagina [[https://​github.com/​acs-pa/​pa-lab/​tree/​main/​skel/​lab10|pa-lab::​skel/​lab10]]. 
  
-</​note>​ 
 <note warning> <note warning>
  
Line 439: Line 437:
 </​note>​ </​note>​
  
-==== Task-1: Roy-Floyd ​====+====== Pool probleme (pentru prezentări) ======
  
-Se dă un graf **orientat** cu **n** noduri. Graful are **costuri strict pozitive**.+======= 1) Number of Possible Sets of Closing Branches =======
  
-Se dă matricea ponderilor - **w**, se cere matricea drumurilor minime - **d**, aplicând algoritmul **Roy-Floyd**.+Enunț: O companie are ''​N''​ sucursale și mai multe drumuri bidirecționalefiecare având o anumită distanță. O configurație a sucursalelor care rămân deschise este considerată validă dacă distanța minimă dintre oricare două sucursale deschise nu depășește o limită dată. Sarcina este să găsești numărul total de configurații valide (inclusiv configurația în care toate sucursalele sunt închise).
  
 +Date de intrare: Un număr întreg ''​N''​ reprezentând numărul de sucursale, un număr întreg ''​maxDistance''​ reprezentând distanța maximă permisă și o matrice ''​roads'',​ unde fiecare element este un triplet ''​[u,​ v, weight]''​ ce reprezintă un drum bidirecțional și lungimea acestuia.
  
-<note warning>+Date de ieșire: Un singur număr întreg reprezentând numărul total de configurații valide de sucursale.
  
-Restricții și precizări:+Problema se poate testa la: 
 +[[https://​leetcode.com/​problems/​number-of-possible-sets-of-closing-branches/​description/​|LeetCode - Number of Possible Sets of Closing Branches]]
  
-  * $ n <100 $ +======= 2Minimum Cost to Convert String I =======
-  * $ 0 <c <1.000$, unde c este costul unui arc. +
-    * Dacă **nu există arc** între o pereche de noduri x și y, distanța de la nodul x la nodul y din **matricea ponderilor** va fi 0. +
-    * Dacă după aplicarea algoritmului **nu se găsește drum** pentru o pereche de noduri x și y, se va considera **distanța** dintre ele egală cu 0 (se stochează în **matricea distantelor** valoarea 0)+
-    * Drumul de la nodul i la nodul i are lungime 0 (prin convenție). +
-  * timp de execuție +
-    * C++: 1s +
-    * Java: 8s+
  
 +Enunț: Se dau două șiruri de caractere, ''​source''​ și ''​target'',​ de aceeași lungime, formate exclusiv din litere mici ale alfabetului englez, și trei vectori: ''​original'',​ ''​changed''​ și ''​cost''​. O literă din ''​original''​ se poate transforma în litera corespunzătoare din ''​changed''​ plătind costul asociat din ''​cost''​. Se cere găsirea costului minim total pentru a transforma șirul ''​source''​ în șirul ''​target'',​ știind că operațiile de transformare pot fi aplicate în lanț de oricâte ori.
  
-</​note>​+Date de intrare: Șirurile de caractere ''​source''​ și ''​target'',​ împreună cu vectorii de transformare ''​original'',​ ''​changed''​ și ''​cost''​.
  
-==== Task-2Johnson ====+Date de ieșireUn singur număr întreg reprezentând costul minim pentru transformarea întregului șir, sau -1 dacă transformarea este imposibilă.
  
-Se dă un graf **orientat** cu **n** noduriGraful are **costuri oarecare** (pot fi șnegative).+Problema se poate testa la: 
 +[[https://​leetcode.com/​problems/​minimum-cost-to-convert-string-i/|LeetCode - Minimum Cost to Convert String I]]
  
-Se dă lista de adiacență cu costurile aferente, se cere matricea drumurilor minime ​**d**, aplicând algoritmul **Johnson**.+======= 3) Roy-Floyd Invers (rfinv) =======
  
 +Enunț: Se dă o matrice de dimensiune ''​N × N''​ care reprezintă potențialele distanțe minime dintre oricare două noduri dintr-un graf orientat (adică rezultatul aplicării algoritmului Roy-Floyd). Se cere să se verifice dacă această matrice este validă și, în caz afirmativ, să se determine numărul minim de muchii pe care ar trebui să le aibă graful inițial pentru a genera exact aceste distanțe.
  
-<note warning>​ +Date de intrare: Numărul de teste ''​T''​Pentru fiecare testse dă numărul de noduri ​''​N''​urmat de o matrice ​de dimensiune ''​N × N''​ ce reprezintă ​distanțele.
- +
-Restricții și precizări: +
- +
-  * $ n <= 1000 $ +
-  * $ m <= 25000 $ +
-  * $ -1000 <= c <= 1.000$unde c este costul unui arc. +
-    * Dacă **nu există arc** între o pereche ​de noduri ​x și ydistanța ​de la nodul x la nodul y din **matricea ponderilor** va fi 0. +
-    * Dacă după aplicarea algoritmului **nu se găsește drum** pentru ​pereche ​de noduri x și y, se va considera **distanța** dintre ​ele egală cu 0 (se stochează în **matricea distantelor** valoarea 0). +
-    * Drumul de la nodul i la nodul i are lungime 0 (prin convenție). +
-    * Dacă graful conține un ciclu de cost negativ, se va afișa mesajul: Ciclu negativ! +
-  * timp de execuție +
-    * C++: 1s +
-    * Java: 8s +
- +
- +
-</​note>​ +
- +
-=== Task-3: Orașul care poate accesa cele mai puține noduri (dându-se o distanță limită) === +
-Rezolvați problema [[ https://​leetcode.com/​problems/​find-the-city-with-the-smallest-number-of-neighbors-at-a-threshold-distance/​description/​ | Find the City With the Smallest Number of Neighbors at a Threshold Distance ]] pe LeetCode.+
  
 +Date de ieșire: Pentru fiecare test, se va afișa pe o linie separată "​NU"​ dacă nu se poate construi un astfel de graf. Dacă este posibil, se va afișa "​DA",​ urmat de un spațiu și de numărul minim de muchii ale grafului inițial.
  
-==== BONUS ====+Problema se poate testa la: 
 +[[https://​infoarena.ro/​problema/​rfinv|Infoarena - rfinv]]
  
-La acest laborator, asistentul va alege 1-2 probleme din secțiunea extra. 
  
 ==== Extra ==== ==== Extra ====
pa/laboratoare/laborator-09.1768992796.txt.gz · Last modified: 2026/01/21 12:53 by darius.neatu
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