Pagini recente » Cod sursa (job #605182) | Cod sursa (job #2094412) | Cod sursa (job #1669260) | Cod sursa (job #2203253) | Cod sursa (job #121701)
Cod sursa(job #121701)
var m:array[0..5000,0..5000]of longint;
v,c,a:array[0..16009]of longint;
n,i,j,k:longint;
s:int64;
f:text;
procedure dosar(x:longint);
var b:longint;
begin
for b:=1 to c[x] do
begin
dosar(m[x,b]);
v[x]:=v[x]+v[m[x,b]];
end;
end;
procedure merge(w,p,r:longint);
var x,y:array[1..1000]of longint;
q,u,c,d,e:longint;
begin
q:=(p+r)div 2;
if q>p then merge(w,p,q);
if r>q+1 then merge(w,q+1,r);
for u:=p to q do
x[u]:=m[w,u];
for u:=q+1 to r do
y[u]:=m[w,u];
c:=p;
d:=q+1;
e:=p;
while(c<=q)and(d<=r)do
if v[x[c]]>v[y[d]]then begin m[w,e]:=x[c];
e:=e+1;
c:=c+1;
end
else begin m[w,e]:=y[d];
e:=e+1;
d:=d+1;
end;
if c<=q then for u:=e to r do
begin
m[w,u]:=x[c];
c:=c+1;
end
else for u:=e to r do
begin
m[w,u]:=y[d];
d:=d+1;
end;
end;
begin
assign(f,'dosare.in');
reset(f);
read(f,n);
for i:=2 to n do
begin
v[i]:=1;
read(f,k);
c[k]:=c[k]+1;
m[k,c[k]]:=i;
end;
for i:=1 to n do
begin
read(f,a[i]);
v[i]:=a[i];
end;
close(f);
dosar(1);
for i:=1 to n do
if c[i]>1 then merge(i,1,c[i]);
m[0,1]:=1;
c[0]:=1;
for i:=0 to n do
for j:=1 to c[i] do
s:=s+v[m[i,j]]*j;
assign(f,'dosare.out');
rewrite(f);
writeln(f,s);
close(f);
end.