a:array[0..100,0..100]of longint;
v1,v2:array[0..100]of boolean;
function judge:boolean;//判断作业是否已做完
var k:longint;
begin
for k:=1 to n do
if not v1[k] then exit(false);
exit(true);
end;
procedure dfs(x,num:longint);
var k:longint;
begin
if num>min then exit;
if judge then begin
if num-1<min then min:=num;
exit;
end;
v2[x]:=true;
for k:=1 to a[x,0] do v1[a[x,k]]:=true;
for k:=1 to w do
if not v2[k] then dfs(k,num+1);
v2[x]:=false;
for k:=1 to a[x,0] do v1[a[x,k]]:=false;
exit;
end;
begin
readln(n,w);
for i:=1 to w do
begin
read(a[i,0]);
for j:=1 to a[i,0] do read(a[i,j]);
end;
min:=maxlongint;
for i:=1 to n do
begin
fillchar(v1,sizeof(v1),false);//v1存某个作业是否做了
fillchar(v2,sizeof(v2),false);//v2存某个大神是否请了
dfs(i,0);
end;
writeln(min);
end.
有人说 搜索+剪枝=AC ,我是搜索错了还是剪枝错了?