算法:并查集。
汗,光棍题……
汗,光棍题……
![鄙视](http://static.blog.csdn.net/xheditor/xheditor_emot/default/despise.gif)
题目有问题的说,只要A愿意与B交流,那么不管B愿不愿意与A交流都将它们分成一组……
program P1111;
var
fa:array [0..200] of longint;
n,ans:longint;
function get(x:longint):longint;
begin
if fa[x]=x then exit(x)
else
begin
fa[x]:=get(fa[x]);
exit(fa[x]);
end;
end;
procedure union(x,y:longint);
begin
if get(x)<>get(y) then
begin
dec(ans);//如果不是一个祖先的人们合并在一起,那么就减少了一个人的组,就减掉一个ans。
fa[get(x)]:=get(y);
end;
end;
procedure init;
var
i,t:longint;
begin
readln(n);
ans:=n;//初始ans为n,表示最少需要将人分成n组,每组一人。
for i:=1 to n do fa[i]:=i;
for i:=1 to n do
begin
read(t);
while t<>0 do
begin
union(i,t);
read(t);
end;
readln;
end;
end;
begin
assign(input,'P1111.in'); reset(input);
assign(output,'P1111.out'); rewrite(output);
init;
writeln(ans);
close(input); close(output);
end.