The Suspects
又是一道英文题~~~
题目大意:
一个学校,有N个学生,编号为0-N-1,现在第0号学生感染了非典,凡是和第0号学生在同一个社团的人就会感染非典,并且这些人如果还参加了其他的社团,他所在的社团照样全部会被感染,求感染的人数。第一行输入两个数n,m,第一个为学生总人数n,第二个数为询问的关系对数m。接下来了m行分别输入这m条学生关系(代表处于同一个社团),每行的第一个数为处于同一个社团的人数。输出被感染的人数。
Sample Input
100 4 2 1 2 5 10 13 11 12 14 2 0 1 2 99 2 200 2 1 5 5 1 2 3 4 5 1 0 0 0
Sample Output
4 1 1代码 :
#include<iostream>
using namespace std;
int father[30001];
int getfather(int x)
{
if(x!=father[x])
father[x]=getfather(father[x]);
return father[x];
}
int main()
{
int n,m,k,i,j,sum,shu,a,b;
while(cin>>n>>m,n+m)
{
for(i=0;i<n;i++) father[i]=i;
for(i=1;i<=m;i++)
{
cin>>k>>a;
a=getfather(a); //把每行的第一个学生当成父节点
for(j=1;j<k;j++) //再输入k-1个学生
{
cin>>shu;
father[getfather(shu)]=a;
}
}
b=getfather(0);
sum=0;
for(i=0;i<n;i++)
{
shu=getfather(i);
if(b==shu) sum++;
}
cout<<sum<<endl;
}
return 0;
}