ITREE - Nhãn của cây

Tác giả: RR

Ngôn ngữ: Pascal

{$R+,Q+}
const
  FINP='';
  FOUT='';
  MAXN=1000;
var
  a,c:array[1..MAXN,1..MAXN] of longint;
  d,deg:array[1..MAXN] of longint;
  f1,f2:text;
  test,t,n:longint;
procedure openF;
begin
  assign(f1,FINP); reset(f1);
  assign(f2,FOUT); rewrite(f2);
end;
procedure closeF;
begin
  close(f1); close(f2);
end;
procedure inp;
var
  i,u,cc:longint;
begin
  fillchar(deg,sizeof(deg),0);
  read(f1,n);
  for i:=2 to n do
    begin
      read(f1,u,cc);
      inc(deg[u]); a[u,deg[u]]:=i;
      c[u,i]:=cc;
    end;
end;
procedure dfs(u:longint);
var
  i,v:longint;
begin
  d[u]:=0;
  for i:=1 to deg[u] do
    begin
      v:=a[u,i];
      dfs(v);
      if (deg[v]=0) or (c[u,v]<d[v]) then d[u]:=d[u]+c[u,v]
      else d[u]:=d[u]+d[v];
    end;
end;
begin
  openF;
  read(f1,t);
  for test:=1 to t do
    begin
      inp;
      dfs(1);
      writeln(f2,d[1],'.00');
    end;
  closeF;
end.

Download