type alice=record
x,y,next:longint;
end;
var n,i,j,aa,ab,ac,min,tot,sum:longint;
a,first,up,down:array[1..10000]of longint;
bian:array[1..100000]of alice;
procedure connect(x,y:longint);
begin
inc(tot);
bian[tot].x:=x;
bian[tot].y:=y;
bian[tot].next:=first[x];
first[x]:=tot;
end;
procedure dfs1(x,fa:longint);
var k,y:longint;
begin
k:=first[x];
while k<>0 do
begin
y:=bian[k].y;
if y<>fa then
begin
dfs1(y,x);
inc(a[x],a[y]);
inc(down[x],down[y]);
inc(down[x],a[y]);
end;
k:=bian[k].next;
end;
end;
procedure dfs2(x,fa:longint);
var y,k:longint;
begin
k:=first[x];
while k<>0 do
begin
y:=bian[k].y;
if y<>fa then
begin
up[y]:=up[x]+down[x]-down[y]-a[y]+(sum-a[y]);
dfs2(y,x);
end;
k:=bian[k].next;
end;
end;
begin
assign(input,'ex.in');
assign(output,'ex.out');
reset(input);
rewrite(output);
readln(n);
sum:=0;
for i:=1 to n do
begin
readln(aa,ab,ac);
a[i]:=aa;
inc(sum,a[i]);
if ab<>0 then
begin
connect(i,ab);
connect(ab,i);
end;
if ac<>0 then
begin
connect(i,ac);
connect(ac,i);
end;
end;
dfs1(1,0);
dfs2(1,0);
min:=maxlongint;
for i:=1 to n do
if up[i]+down[i]<min then min:=up[i]+down[i];
writeln(min);
close(input);
close(output);
end.
用树形动规做的……