Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2008-03-03 12:11:53.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:flux1.in, flux1.outSursă
AutorAutor necunoscutAdăugată defireatmyselfBogdan-Alexandru Stoica fireatmyself
Timp execuţie pe test1.25 secLimită de memorie65536 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Flux Maxim

Fie un graf orientat cu N noduri si M muchii. V este multimea nodurilor din graf, iar E multimea muchiilor. Asociem fiecarei muchii (u,v) o capacitate nenegativa cap(u,v). Consideram doua varfuri speciale: nodul 1 care va fi denumit sursa si nodul N, denumit destinatie. Orice nod i (2 ≤ i ≤ N-1) se gaseste pe cel putin un drum de la 1 la N. Definim fluxul in graf ca fiind o functie f: VxV -> Z. Functia f satisface urmatoarele conditii:

  1. este restrictionata de capacitate, adica ∀ i, jV avem f(i,j) ≤ cap(i,j)
  2. este antisimetrica, adica ∀ i, jV avem f(i,j) = -f(j,i)
  3. fluxul se conserva, adica ∀ iV\{1,N} valoarea fluxului care intra in nodul respectiv este egala cu valoarea fluxlui care iese din nodul respectiv (∀ iV avem \sum_{(j,i) \in E}^{} f(j,i) = \sum_{(i,k) \in E}^{} f(i,k)

Valoarea fluxului este F = \sum_{(1,i) \in E}^{} f(1,i), adica fluxul total care pleaca din nodul sursa.

Cerinta

Se cere sa se determine valorile functiei f pentru fiecare muchie (i,j) astfel incat valoarea fluxului sa fie maxima.

Date de intrare

Pe prima linie a fisierul de intrare flux1.in se afla N si M. Urmeaza apoi M linii ce contin 3 numere naturale a, b si c, semnificand faptul ca exista muchie de la nodul a la nodul b avand capacitatea c.

Date de iesire

In fisierul de iesire flux1.out se va scrie fluxul maxim.

Restrictii

  • 1 ≤ N ≤ 200
  • 1 ≤ M ≤ N*(N-1)
  • capacitatea fiecarei muchii este un numar natural nenul mai mic sau egal cu 10 000 000.
  • daca, in fisierul de intrare, exista muchia (a,b) poate sa existe si muchia (b,a)
  • fluxul maxim va fi ≤ 2 000 000 000

Exemplu

flux1.influx1.out
6 12
1 2 6
1 3 3
3 4 5
4 5 4
5 6 4
3 6 100
2 4 3
1 5 4
1 3 6
4 6 5
2 3 5
3 6 4
13

Indicatii de rezolvare

Problema se rezolva cu ajutorul algoritmului Ford Fulkerson, care are urmatorii pasi.

  1. se cauta un drum de la sursa (in cazul nostru, nodul 1) la destinatie (in cazul nostru N) cu orice algoritm (bfs, dfs, etc.) si fie acesta 1 -> i1 -> i2 -> ... -> ik -> N
  2. de pe acest drum se alege muchia pentru care valoarea cap(i,j)-f(i,j) este minima (fie ea cmin)
  3. se cresc cu cmin f(1,i1), f(i1,i2), ..., f(ik,N) si se scad cu cmin f(i1,1), f(i2,i1), ..., f(N,ik)
  4. se creste valoarea fluxul total cu cmin
  5. algoritmul se repeta de la pasul 1

O descriere detaliata a algoritmului o gasiti aici.

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?