This shows you the differences between two versions of the page.
|
pa:laboratoare:laborator-09 [2026/01/21 12:50] 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 |}} | ||
| + | Adobe is a global technology leader with a mission to **change the world through personalized digital experiences**. For over four decades, Adobe has transformed how individuals, teams, businesses, and enterprises create, manage, and deliver content across every surface and channel. | ||
| - | {{:pa:new_pa:partners:adobe-logo.png?350 |}} | + | With **AI at the core**, tools like **Adobe Firefly** and AI-powered assistants make creativity faster, smarter, and more personalized—while keeping it safe and responsible. In **Adobe Experience Cloud**, AI powers real-time personalization, predictive insights, and automated customer journeys, helping brands deliver exceptional experiences at scale. At Adobe, **creativity meets productivity**, and AI is the catalyst for transformation. |
| - | Adobe is a global technology leader with a mission to change the world through personalized digital experiences. For over four decades, Adobe has transformed how individuals, teams, businesses, and enterprises create, manage, and deliver content across every surface and channel. | + | |
| - | With AI at the core, tools like Adobe Firefly and AI-powered assistants make creativity faster, smarter, and more personalized—while keeping it safe and responsible. In Adobe Experience Cloud, AI powers real-time personalization, predictive insights, and automated customer journeys, helping brands deliver exceptional experiences at scale. | + | |
| - | At Adobe, creativity meets productivity, and AI is the catalyst for transformation | + | |
| ===== Obiective laborator ===== | ===== Obiective laborator ===== | ||
| 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ționale, fiecare 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 $ | + | ======= 2) Minimum 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-2: Johnson ==== | + | Date de ieșire: Un 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** noduri. Graful are **costuri oarecare** (pot fi și 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 test, se 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 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). | + | |
| - | * 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 ==== | ||