题意: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.