Retea hidrografica (Pregatire lot Cluj, aprilie 1996)

   Numele programului: p2.pas sau p2.c sau p2.cpp
   Numele fisierului de intrare: p2.dat

     Ministerul Apelor si Padurilor hotaraste sa tina evidenta sistemelor 
hidrografice pe calculator. Pentru aceasta trebuie retinute toate cele n ruri 
si afluentii (2<=n<=20). Cele n ruri sunt numerotate de la 1 la n. Se citesc 
dintr-un fisier perechi de forma:
i j 
cu urmatoarea semnificatie: rul i este afluent al rului j.
     Pentru a stabili situatiile n care apar inundatii trebuie calculat debitul 
fiecarui ru n parte.
     Debitul unui izvor se defineste ca fiind cantitatea de apa care trece prin 
sectiunea izvorului n unitatea de timp. Debitul rului i la varsare va fi egal
cu debitul izvorului rului i plus suma debitelor afluentilor la varsare n rul i.
     Dndu-se pentru fiecare ru debitul izvorului sau, sa se calculeze debitul
la varsare al fiecarui ru.
Intrare: Fisierul text de intrare cuprinde mai multe seturi de date, avnd 
urmatorul format:
- prima linie contine numarul de seturi de date;
- urmatoarele linii contin seturile de date. Pentru un set de date:
    - prima linie contine numarul rurilor si apoi pe cte o linie perechile de 
ruri (ultima pereche este 0 0), dupa care urmeaza pe o linie debitele rurilor
(n ordine cresc[toare), valorile fiind separate printr-un spatiu
    - datele referitoare la un set de date se ncheie cu o linie care contine 
doar cifra 0.
OBSERVATIE:
  Se considera debitele rurilor ca fiind numere ntregi.
  Se considera ca datele de intrare sunt valide.
Iesirea: 
Se va afisa pe ecran debitele la varsare, fiecare debit pe un rnd.
Exemplu: 
Pentru fisierul de intrare:
1
4
1 3
2 4
3 4
0 0
5 3 6 1
0
iesirea va fi:
5
3
11
15
==============================================
Teste:
5
4
1 3
2 4
3 4
0 0
5 3 6 1
0
2
1 2
0 0
2 3
0
5
1 3
2 3
3 4
5 4
0 0
1 1 1 1 1
0
9
1 2
3 2
4 2
2 5
7 6
8 6
6 5
5 9
0 0
1 2 3 4 5 6 7 8 9
0
4
1 2
2 3
3 4
0 0
5 10 100 30
0
==================
Rezultate test:
5 3 11 15
2 5
1 1 3 5 1
1 10 3 4 36 21 7 8 45
5 15 115 145
=======================================

Solutia 1 (Dragos Vingarzan)
var q,a,b,c,n,m,i,j,k,l:integer;
    d,y:array [1..100] of integer;
    x:array [1..100,1..2] of integer;
    p:array [1..100] of boolean;
    f,ff:text;
    pp:integer;

begin
 assign(f,'input.txt');
 assign(ff,'output.txt');
 reset(f);
 rewrite(ff);
 readln(f,m);
 for q:=1 to m do
  begin
   readln(f,n);
   readln(f,a,b);
   c:=0;
   while a<>0 do
    begin
     inc(c);
     x[c,1]:=a;
     x[c,2]:=b;
     readln(f,a,b);
    end;
   for i:=1 to n do
    read(f,y[i]);
   for i:=1 to n do
    begin
     d[i]:=y[i];
     p[i]:=true;
    end;
   repeat
    pp:=0;
    for i:=1 to c do
     if p[x[i,1]] then begin
                        d[x[i,2]]:=d[x[i,2]]+d[x[i,1]];
                        p[x[i,1]]:=false;
                        inc(pp);
                       end;
   until pp<1;
   for i:=1 to n do
    writeln(ff,d[i]);
   writeln(ff);
  end;
 close(f);
 close(ff);
end.
----------------------------
