1:procedure Min-Vertex-Cover(T);
2:begin
3: 按前序遍历顺序重新编排整棵树的节点编号。
4: for I:=1 to n do cover[I]:=0;
5: for I:=n Downto 2 do
6: if (cover[I]=0) and (cover[parent[I]]=0) then
7: cover[parent[I]]:=1;
8:end;
Program exp;
Var count,m,tmp,k,j,i,n:Integer;
Convert,Parent,Cover:Array [0..1500] Of Integer; {Convert[I]:节点I的前序遍历标号; Parent[I]:指出节点I的父亲节点;Cover[I]:是否覆盖节点[I]}
Procedure Preorder(root:Integer); {树的前序遍历、标号过程}
Var i,j,k:Integer;
Begin
Convert[count]:=root;Inc(count);
For i:=1 To n Do
If Parent[i]=root Then Preorder(i);
End;
Begin
Assign(input,'input.txt');Reset(input);
Assign(output,'output.txt');Rewrite(output);
{初始化并读入数据}
Readln(n);
For i:=0 To n Do parent[i]:=-1;
For i:=1 To n Do Begin
Read(j,m);
For k:=1 To m Do Begin
Read(tmp);Parent[tmp]:=j;
End;
Readln;
End;
Fillchar(cover,sizeof(cover),0);
count:=1;i:=-1;Repeat Inc(i) Until Parent[i]=-1;
Preorder(i);count:=0;
For i:=n Downto 2 Do {贪心算法}
If (cover[Convert[i]]=0) and (Cover[parent[Convert[i]]]=0) Then Begin
cover[parent[Convert[i]]]:=1;
Inc(count);
End;
Writeln(count);
Close(output);
End.