题目大意:
在一堆关系复杂的宗教信仰大学生中求出不同宗教的最大数目。
并差集:
1.一直把信仰同一种宗教的X和Y合并到一个集合。
2.for一遍累加不同集合个数(宗教个数)
时间复杂度:O(M)
var
f:array [0..50001] of longint;
i,n,m,x,y,ans,g:longint;
function find(c:longint):longint;
begin
if f[c]=c then exit(c);
f[c]:=find(f[c]);
exit(f[c]);
end;
begin
readln(n,m);
while (n<>0) or (m<>0) do
begin
inc(g);
fillchar(f,sizeof(f),0);
ans:=0;
for i:=1 to n do f[i]:=i;
for i:=1 to m do
begin
readln(x,y);
if find(x)<>find(y) then
f[find(x)]:=find(y);
end;
for i:=1 to n do
if f[i]=i then inc(ans);
writeln('Case ',g,': ',ans);
readln(n,m);
end;
end.