记录编号 15330 评测结果 AAAAAAAAAAAAA
题目名称 [POI 1999] 三色二叉树 最终得分 100
用户昵称 Gravatarbing 是否通过 通过
代码语言 Pascal 运行时间 2.329 s
提交时间 2009-11-11 19:07:55 内存使用 95.65 MiB
显示代码纯文本
program bing;
type
 dian=record
 l,r,d:integer;
end;
var
 f1,f2:text;
 dm:integer;
 xt,kt:integer;
 a:array[1..10000] of char;
 t:array[1..10000] of dian;
 b:array[0..10000,0..5000] of integer;
 f:array[0..10000,0..1,0..1] of integer;
procedure bl(x:integer);
var
 de:integer;
begin
 if a[x]<>'0' then
 begin
  inc(xt);
  t[x].l:=xt;
  t[xt].d:=t[x].d+1;
  de:=t[xt].d;
  if de>dm then dm:=de;
  inc(b[de,0]);
  b[de,b[de,0]]:=xt;
  bl(xt);
  if a[x]='2' then
   begin
    inc(xt);
    t[x].r:=xt;
    t[xt].d:=t[x].d+1;
    de:=t[xt].d;
    if de>dm then dm:=de;
    inc(b[de,0]);
    b[de,b[de,0]]:=xt;
    bl(xt);
   end;
 end;
end;
procedure init;
var
 de:integer;
begin
 assign(f1,'trot.in');reset(f1);
 assign(f2,'trot.out');rewrite(f2);
 kt:=0;
 fillchar(t,sizeof(t),0);
 fillchar(b,sizeof(b),0);
 b[0,0]:=1;b[0,1]:=1;
 while not eof(f1) do
 begin
  inc(kt);
  read(f1,a[kt]);
 end;
 xt:=1;
 bl(1);

end;
procedure nb;
var
 i,j,k:integer;
begin
 for i:=1 to kt do
 if a[i]='0' then
 begin
  f[i,0,1]:=0;f[i,1,1]:=1;
  f[i,0,0]:=0;f[i,1,0]:=1;
 end;
 for i:=dm-1 downto 0 do
 for j:=1 to  b[i,0] do
 if a[b[i,j]]<>'0' then
 begin
  k:=b[i,j];
  if f[t[k].l,0,1]+f[t[k].r,1,1]>f[t[k].l,1,1]+f[t[k].r,0,1]
  then f[k,0,1]:=f[t[k].l,0,1]+f[t[k].r,1,1]
  else f[k,0,1]:=f[t[k].l,1,1]+f[t[k].r,0,1];
  f[k,1,1]:=f[t[k].l,0,1]+f[t[k].r,0,1]+1;
  if f[t[k].l,0,0]+f[t[k].r,1,0]<f[t[k].l,1,0]+f[t[k].r,0,0]
  then f[k,0,0]:=f[t[k].l,0,0]+f[t[k].r,1,0]
  else f[k,0,0]:=f[t[k].l,1,0]+f[t[k].r,0,0];
  f[k,1,0]:=f[t[k].l,0,0]+f[t[k].r,0,0]+1;
 end;
end;
begin
 init;
 nb;
 if f[1,1,1]>f[1,0,1] then write(f2,f[1,1,1],' ') else write(f2,f[1,0,1]);
 if f[1,1,0]<f[1,0,0] then write(f2,f[1,1,0]) else write(f2,f[1,0,0]);
 close(f1);close(f2);
end.