题意:N组学生.一个学生能同时加入不同的组.同一组的学生会同时感染病毒.
现在0号的学生感染了病毒,问一共有多少个人感染病毒.
分析:并查集.将同一组的学生合并.这样有交集的组也被合并.最后只要求出
0号所在的集合大小即可.
code:
var f:array[0..30000] of longint;
n,m,i,j,k,u,v,fu,fv,fx,ans:longint;
function getf(x:longint):longint;
begin
if f[x]<>x then f[x]:=getf(f[x]);
exit(f[x]);
end;
begin
while not seekeof do
begin
readln(n,m);
if n+m=0 then break;
for i:=0 to n-1 do f[i]:=i;
for i:=1 to m do
begin
read(k);
read(u);
for j:=1 to k-1 do
begin
read(v);
fu:=getf(u);
fv:=getf(v);
if fu<>fv then f[fu]:=fv;
end;
end;
fx:=getf(0);
ans:=0;
for i:=0 to n-1 do
if getf(i)=fx then inc(ans);
writeln(ans);
end;
end.