题目大意:
有n个学生和m个组,学生0是SARS患者,所有的跟0在一组的学生也是患者,患者可以传递。
找出患者的数量
解题思路:
并查集
代码如下:
#include<iostream>
#include<cstdio>
int find(int *father,int i)
{
if(father[i]==i)
return i;
else
return find(father,father[i]);
}
int main()
{
int father[30000],i,k,n,m,x,y,count;
for(i=0;i<30000;i++)
father[i]=i;
while(scanf("%d%d",&n,&m),!(m==0&&n==0))
{
while(m--)
{
scanf("%d",&k);
if(k!=0)
{
scanf("%d",&x);
for(i=1;i<k;i++)
{
scanf("%d",&y);
if(father[y]==y)
father[y]=x;
else
{
if(find(father,x)!=find(father,y))
father[find(father,y)]=x;
}
}
}
}
k=find(father,0);
for(i=1,count=1;i<n;i++)
{
if(find(father,i)==k)
count++;
}
printf("%d\n",count);
for(i=0;i<n;i++)
father[i]=i;
}
return 0;
}