Aplicații

Aplicația 1

Se dă un vector de numere întregi. Să se ordoneze crescător valorile din vector.
Fișier de intrare: sort.in
Linia 1: n - numărul de elemente din vector
Linia 2: A1 - elementul 1 din vector [...]
Linia n+1: An - elementul n din vector
Fișier de ieșire: sort.out
Linia 1: S1 ... Sn, unde S este șirul A sortat crescător
Restricții
-30000<=A1, ..., An<=30000
-1<=n<=30000

Organizați vectorul ca un heap și extrageți pe rând minimul. În acest mod, complexitatea totală va fi [n log n] independent de structura datelor de intrare.

Noțiuni Introductive

  1. Arbori
  2. Arbori binari
  3. Heap-uri

Aplicația 2

Scrieți un program care citește un graf dat prin lista muchiilor și care să determine arborele parțial de cost minim. Prin costul unui arbore se înțelege suma costurilor muchiilor din arbore.
Fișier de intrare: apm.in
Linia 1: n m - numărul de noduri respectiv de muchii din graf
Linia 2: X1 Y1 C1- există muchie între nodurile X1 și Y1 de cost C1 [...]
Linia m+1: Xm Ym Cm- există muchie între nodurile Xm și Ym de cost Cm
Fișier de ieșire: apm.out
Linia 1: S1 D1[...]
Linia n-1: S(n-1) D(n-1), unde Si Di reprezintă descrierea muchiei i din arbore. (Ordinea în care acestea apar nu contează).

Folosiți algoritmul lui Kruskal organizând costurile muchiilor într-un heap.


Aplicația 3

Se dă un graf prin lista muchiilor și două vârfuri din graf. Să se determine drumul de cost minim dintre cele două vârfuri date. Prin costul unui drum se înțelege suma costurilor muchiilor ce aparțin drumului.
Fișier de intrare: drum.in
Linia 1: n m - numărul de noduri respectiv de muchii din graf
Linia 2: X1 Y1 C1- există muchie între nodurile X1 și Y1 de cost C1 [...]
Linia m+1: Xm Ym Cm- există muchie între nodurile Xm și Ym de cost Cm
Linia m+2: S D - cele două vârfuri pentru care trebuie calculat drumul minim.
Fișier de ieșire: drum.out
Linia 1: C- costul drumului minim.

Folosiți algoritmul lui Dijkstra optimizând căutarea valorii minime la un anumit pas. Pentru a putea extrage minimul în timp [log n] organizați vectorul de valori temporare ca un heap.