program t;
var n,i,k,k1,j,v,m,u,root:integer;
s:string;
a:array[0..1500,1..10]of integer;
c:array[0..1500]of byte;
b:array[0..1500]of integer;
f,g:array[0..1500]of integer;
function min(a,b:integer):integer;
begin
if a<b then min:=a else min:=b;
end;
procedure dfs(x:integer);
var i:integer;
begin
if (f[x]<>-1)and(g[x]<>-1) then exit;
if b[x]=0 then
begin
f[x]:=1;
g[x]:=0;
exit;
end;
for i:=1 to b[x] do
if (f[a[x,i]]=-1)or(g[a[x,i]]=-1) then dfs(a[x,i]);
f[x]:=1;g[x]:=0;
for i:=1 to b[x] do
begin
f[x]:=f[x]+min(g[a[x,i]],f[a[x,i]]);
g[x]:=g[x]+f[a[x,i]];
end;
end;
begin
assign(input,'t.in');
assign(output,'t.out');
reset(input);
rewrite(output);
while not eof do
begin
readln(n);
fillchar(c,sizeof(c),0);
for i:=0 to n-1 do
begin
readln(s);
s:=s+' ';
k:=pos(':',s);
val(copy(s,1,k-1),v);
k:=pos('(',s);
k1:=pos(')',s);
val(copy(s,k+1,k1-k-1),m);
k:=pos(' ',s);
b[v]:=m;
for j:=1 to m do
begin
delete(s,1,k);
k:=pos(' ',s);
val(copy(s,1,k-1),u);
a[v,j]:=u;
c[u]:=1;
end;
end;
root:=0;
for i:=0 to n-1 do if c[i]=0 then begin root:=i;break;end;
for i:=0 to n do begin f[i]:=-1;g[i]:=-1;end;
dfs(root);
writeln(min(g[root],f[root]));
end;
close(input);
close(output);
end.
Strategic game
最新推荐文章于 2022-04-28 22:40:02 发布