Cod sursa(job #404789)

Utilizator nickyyLal Daniel Emanuel nickyy Data 26 februarie 2010 18:14:04
Problema Cerere Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.05 kb
const infile='cerere.in';
  outfile='cerere.out';
  maxn=100003;
type nod=^pnod;
  pnod=record  inf:longint; next:nod; end;
var a:array[1..maxn]of nod;
  str,t,sol,dfn:array[1..maxn]of longint;
  uz:array[1..maxn]of boolean;
  n:longint;

 procedure citire;
 var i,j,k:longint;
   q:nod;
 begin
   assign(input,infile); reset(input); readln(n);
   for i:=1 to n do read(str[i]);
   for k:=1 to n-1 do begin
     readln(i,j);
     new(q); q^.inf:=j; q^.next:=a[i]; a[i]:=q;
     t[j]:=i;
     end;
   close(input);
 end;

 procedure df(x,ind:longint);
 var q:nod;
 begin
   dfn[ind]:=x; q:=a[x];
   if(str[x]>0)then sol[x]:=sol[dfn[ind-str[x]]]+1;
   while(q<>nil)do begin
     df(q^.inf,ind+1); q:=q^.next;
     end;
 end;

 procedure solve;
 var i:longint;
 begin
   i:=1; while(i<n)and(t[i]>0)do inc(i);
   sol[i]:=0; df(i,1);
 end;

 procedure afisare;
 var i:longint;
 begin
   assign(output,outfile); rewrite(output);
   for i:=1 to n do write(sol[i],' ');
   close(output);
 end;

begin
  citire; solve; afisare;
end.